【问题标题】:Make django select a list of related objects让 django 选择相关对象的列表
【发布时间】:2013-02-16 10:34:15
【问题描述】:

我有一个这样的模型:

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

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

我尝试阅读 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) 这不是我想要的问题列表。

【问题讨论】:

  • 您已经设置了一个 IssueWatch 模型,只是为了收集这些信息,我不知道有什么方法可以让您获得问题列表而无需通过这些,除非您有其他表将用户与个别问题联系起来。
  • 删除密集思维
  • 我正在删除此评论并编辑问题...

标签: django orm django-models django-queryset


【解决方案1】:

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

Issue.objects.filter(issuewatch__user=17)

Source

【讨论】:

  • 我想我应该因为包含源代码而获得奖励;)
【解决方案2】:

只需一个简单的filter 即可。选择查询允许反向关系。所以:

Issue.objects.filter(issuewatch__user = 17)

【讨论】:

  • 我要掷硬币看谁拿到绿旗... :-)
  • 我会赞成这个来弥补我得到复选标记:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2012-09-15
  • 2023-04-10
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多