1

我在 Django 中有以下模型:

from django.db import models

class User(models.Model):
    pen_name = models.CharField(max_length=30)
    email = models.EmailField()
    activated = models.BooleanField()
    def __unicode__(self):
        return self.email + '-' + self.pen_name

class Original_Work(models.Model):
    title = models.CharField(max_length=25)
    summery = models.TextField()
    user = models.ForeignKey(User)
    date_published = models.DateField()
    one_shot = models.BooleanField()
    def __unicode__(self):
        return self.title + '-' + self.user.email

class Chapter(models.Model):
    work = models.ForeignKey(Work)
    title = models.CharField(max_length=25)
    order_number = models.IntegerField()

class Review(models.Model):
    chapter = models.ForeignKey(Chapter)
    work = models.ForeignKey(Work)
    date_published = models.DateField()

class Work_Subscription(models.Model):
    user = models.ForeignKey(User)
    to_work = models.ForeignKey(Work)

class User_Subscription(models.Model):
    user = models.ForeignKey(User, related_name='user_owner')
    to_user = models.ForeignKey(User, related_name='user_to')

class Alert(models.Model):
    title = models.CharField(max_length=60)
    # add type
    link = models.CharField()


class Book(models.Model):
    title = models.CharField(max_length=50)
    author = models.CharField(max_length=50)
    def __unicode__(self):
        return self.title

在总结/解释中,每个用户“都有”作品。每部作品“都有”章节。每个章节“都有”一个评论和每个评论。还有其他事情,但我的问题也无关紧要。现在,每件“拥有”的东西都有一个“所有者”的外键。所以评论有一个章节的外键,章节有一个作品的外键等等。我的问题是,有什么更好的方法来做到这一点?现在,服务器必须查看所有评论才能找到哪些属于作品。有没有办法加快/改进查找过程?

编辑:我通常需要按照以下方向访问数据用户 -> 工作 -> 章节 -> 审查。这意味着服务器知道用户是什么,并被要求查找用户所做的所有工作。这与了解工作并找到用户相比。

4

1 回答 1

0

我在这里假设您打算将 OriginalWork 类简称为“工作”。我还假设我们正在为网站的当前访问者执行查询。这应该可以解决问题:

author = request.user
Review.objects.filter(chapter__work__user=author)

此外,您不需要在 Review 类中使用多余的工作字段,因为 Review 键是 Chapter 和 Chapter 键是 Work。即,您可以通过阅读章节轻松地从 Review 开始工作 - 无需有两种方法可以到达那里。

有关更多信息,请参阅QuerySet API文档。

于 2012-07-25T04:04:45.913 回答