我有一个这样的模型:
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
,用户可以观看Issue (IssueWatch
)以接收电子邮件更新。
我想做一个查询,它将返回用户正在观看的问题列表。比如:
IssueWatch.objects.select('issue').filter(user=17)
当然,没有像我上面想用的那样的"select"方法。
是否有办法让Django返回一个Issue(而不是IssueWatch)对象的懒惰集合?
--------------- UPDATE -----------
我试着阅读user.issue_set.all()
和它的工作。现在我很困惑。为什么用户会得到一个issue_set?如果我创建了另一个模型,让用户,比如说,喜欢的问题,像:
class IssueFavorite(models.Model):
issue = models.ForeignKey(Issue)
user = models.ForeignKey(User)
issue_set
意味着什么?
--------------- UPDATE2 -----------
啊,我找到答案了。issue_set指用户创建的问题(因为属性:Issue.createdByUser
)这不是我想要的问题列表
那么,如果我理解了这个问题,您想要选择特定用户正在关注的所有问题?可以使用以下命令:
Issue.objects.filter(issuewatch__user=17)
源只需一个简单的filter
就可以了。选择查询允许反向关系。所以:
Issue.objects.filter(issuewatch__user = 17)