如果存在的话,如何将相关对象注释到queryset,否则为None? (Django的)

时间:2015-11-14 17:27:28

标签: python django django-queryset

伙计们,我有一个Django聊天应用程序,人们组成小组并在其下发布回复。每当用户查看组中的回复时,都会看到"看到的对象"为所述回复和所述用户创建(并存储)。

这样,我就可以在每个组中每个用户的所有看不见的回复之前显示新标记

我的问题是:对于回复的查询集中的每个对象,如何为特定用户追加与每个回复相对应的已查看对象?如果没有这样的物体,它将保持无我认为。

相关模型是:

class Reply(models.Model):
    text = models.TextField(validators=[MaxLengthValidator(500)])
    writer = models.ForeignKey(User)
    submitted_on = models.DateTimeField(db_index=True, auto_now_add=True)

class Seen(models.Model):
    seen_user = models.ForeignKey(User)
    seen_at = models.DateTimeField(auto_now_add=True)
    which_reply = models.ForeignKey(Reply)

为用户看到的回复创建了看到的对象;他们不会以其他方式创建。

1 个答案:

答案 0 :(得分:1)

您可以使用href_link对象执行此操作:
https://docs.djangoproject.com/en/1.7/ref/models/querysets/#prefetch-related

e.g。

Prefetch

关于Django< 1.7你可以做两个查询并在视图中将它们组合起来,例如

seen_qs = Seen.objects.filter(user=request.user)
replies_qs = Reply.objects.prefetch_related(
    Prefetch('seen_set', queryset=seen_qs)
)