django全局对象个人用户关系

时间:2016-06-01 19:52:24

标签: django

我有两个主要模特,漫画和问题,单个漫画有多个问题。我试图弄清楚如何获得特定用户已阅读的问题。我正在考虑创建另一个名为ReadIssue的模型来存储读取状态,但无法根据用户的具体情况找出如何获取每个问题的读取属性。

1 个答案:

答案 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是个好主意,因为这样你最有可能在该表中进行所有查找。

通过将这些小助手方法添加到模型中,您可以使整个事物非常富有表现力且易于理解。