我有两个主要模特,漫画和问题,单个漫画有多个问题。我试图弄清楚如何获得特定用户已阅读的问题。我正在考虑创建另一个名为ReadIssue的模型来存储读取状态,但无法根据用户的具体情况找出如何获取每个问题的读取属性。
答案 0 :(得分:1)
根据我在文中所理解的,这可能是构建基本模型的一种方式
class Comic(models.Model):
name = models.CharField(max_length=100)
class Issue(models.Model):
comic = models.ForeignKey(Comic, related_name='issues')
title = models.CharField(max_length=100)
def was_read_by(self, user):
return bool(self.users.filter(user=user).count())
class ReadIssue(models.Model):
user = models.ForeignKey(User, related_name='read')
issue = models.ForeignKey(Issue, related_name='users')
现在你可以做这样的查询
user = Users.objects.get(pk=1)
comic = Comic.objects.get(pk=1)
first_issue = comic.issues.all().first()
user_read_it = first_issue.was_read_by(user)
因此,您只需检查user-issue
表中是否存在组合ReadIssue
。当然,为该对添加index_together
是个好主意,因为这样你最有可能在该表中进行所有查找。
通过将这些小助手方法添加到模型中,您可以使整个事物非常富有表现力且易于理解。