0

我有一个这样的模型:

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 返回一个惰性的问题(而不是问题观察)对象集合?

- - - - - - - - 更新 - - - - - -

我尝试阅读user.issue_set.all()并且它有效。现在我很困惑。为什么用户会得到一个 issue_set?如果我创建了另一个模型,让用户,比如说,最喜欢的问题,比如:

class IssueFavorite(models.Model):
    issue = models.ForeignKey(Issue)
    user = models.ForeignKey(User)

那会是什么issue_set意思呢?

--------------- 更新2 -----------

呵呵,我找到了答案。issue_set 指的是用户创建的问题(因为属性:)Issue.createdByUser这不是我想要的问题列表。

4

2 回答 2

2

只是一个简单的filter工作。选择查询允许反向关系。所以:

Issue.objects.filter(issuewatch__user = 17)
于 2013-03-01T20:31:48.097 回答
2

所以,如果我理解这个问题,您想选择特定用户正在观看的所有问题吗?这将通过以下方式完成:

Issue.objects.filter(issuewatch__user=17)

来源

于 2013-03-01T20:32:34.347 回答