我在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
在夏季/解释中,每个用户“有”作品。每部作品都有“章节”。每章都有“评论”和每篇评论。还有其他一些事情,但那些问题也无关紧要。现在,每个“拥有”的东西都有一个外键给它的“所有者”。因此,评论具有章节的外键,章节具有作品的外键等。我的问题是,有什么更好的方法呢?现在,服务器必须查看所有评论才能找到属于作品的评论。是否有某种方法可以加快/改善查找过程?
编辑:我通常需要按以下方向访问数据用户 - >工作 - >章 - >评论。这意味着服务器知道用户并被要求查找用户已完成的所有工作。这与了解工作和找到用户有关。
答案 0 :(得分:0)
我假设您打算将您的OriginalWork课程称为“工作”。我还假设我们正在为网站的当前访问者执行查询。这应该可以解决问题:
author = request.user
Review.objects.filter(chapter__work__user=author)
此外,您不需要Review类上的冗余工作字段,因为查看章节和章节键的工作密钥。也就是说,你可以通过章节轻松地从评论中获得工作 - 不需要有两种方法来实现目标。
有关详情,请参阅QuerySet API文档。