【问题标题】:Django Advanced AnnotateDjango 高级注释
【发布时间】:2015-12-09 21:10:03
【问题描述】:

鉴于此模型:

from django.db import models


class Post(models.Model):
    text = models.CharField(max_length=255)


class Comment(models.Model):
    text = models.CharField(max_length=255)
    needs_attention = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    post = models.ForeignKey(Post)

我可以annotate帖子列表:

Post.objects.annotate(last_comment_date=Max('comment__created_at'))

要知道last_comment_date,如何注释为last_comment_needs_attention设置值?

【问题讨论】:

  • 请多解释一下您的问题。"为 last_comment_needs_attention 设置一个值"
  • 是的,如果Post 的最后一条评论将标志needs_attention 设置为True,我想现在。解释清楚了吗?
  • 你可以使用过滤器 Post.objects.filter(need_attention=True).annotate(last_comment_date=Max('comment__created_at'))
  • 抱歉,我需要所有帖子,并且我想要一个值为“last_comment_needs_attention”的值。你所说的可以用Post.objects.filter(comment__needs_attention=True) 来完成,但这意味着让所有有评论的帖子都把needs_attention 设置为True。那是完全不同的。
  • 你可以使用conditional expressions来做到这一点。

标签: django python-2.7 django-models


【解决方案1】:

试试这个:

needs_attention = Q(comment__needs_attention=True)
Post.objects.annotate(last_comment_date=Max('comment__created_at'), filter=needs_attention)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多