我有一个这样的模型:
class Issue(models.Model):
project = models.ForeignKey(Project, null=True, blank=True)
key = models.CharField(max_length=30, null=True, blank=True)
title = models.CharField(max_length=400)
description = models.TextField(null=True, blank=True)
createdByUser = models.ForeignKey(User)
creationDate = models.DateTimeField()
updatedDate = models.DateTimeField(null=True, blank=True)
trackerURL = models.URLField(null=True, blank=True)
is_feedback = models.BooleanField()
is_public_suggestion = models.BooleanField()
class IssueWatch(models.Model):
issue = models.ForeignKey(Issue)
user = models.ForeignKey(User)
reason = models.CharField(max_length=30, null=False, blank=False)
完整代码在这里: https://github.com/freedomsponsors/www.freedomsponsors.org/blob/master/djangoproject/core/models.py
这适用于类似问题跟踪器的系统。有Issues
,用户可以观看问题(IssueWatch
)来接收电子邮件更新。
我想创建一个查询,返回用户正在观看的问题列表。类似的东西:
IssueWatch.objects.select('issue').filter(user=17)
当然,没有这样的"选择"我喜欢上面使用的方法。
有什么方法可以让Django返回一个懒惰的Issue(而不是IssueWatch)对象集合?
---------------更新-----------
我试过阅读user.issue_set.all()
并且它有效。
现在我很困惑。为什么User会遇到issue_set?
如果我创建了另一个让用户喜欢的模型,例如:
class IssueFavorite(models.Model):
issue = models.ForeignKey(Issue)
user = models.ForeignKey(User)
那么issue_set
意味着什么?
--------------- UPDATE2 -----------
Duh,我找到了答案。
issue_set是指用户创建的问题(因为属性:Issue.createdByUser
)
那不是我想要的问题清单。
答案 0 :(得分:2)
只需一个简单的filter
即可。选择查询允许反向关系。所以:
Issue.objects.filter(issuewatch__user = 17)
答案 1 :(得分:2)