让django选择一个相关对象的列表



我有一个这样的模型:

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)

相关内容

  • 没有找到相关文章

最新更新