Django中的一个简单的分组(不计数)

时间:2010-04-23 01:03:57

标签: sql django

如果这是原始SQL,那将是一个明智的选择,但在Django中,事实证明这很难找到。我真正想要的是:

SELECT
  user_id
FROM
  django_comments
WHERE
  content_type_id = ? AND
  object_pk = ?
GROUP BY
  user_id

这是问题的最后两行。我想这样做“Django-way”,但我发现的唯一的事情是提到聚合和注释,我认为这不会解决这个问题......是吗?如果有人能向我解释,我真的很感激。

2 个答案:

答案 0 :(得分:2)

据我所知,您希望获得特定GenericObject所有评论的作者(说文章)。

Djangos ORM提供以下relationships 所以解决方案是:

from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType

User.objects.filter(comment_comments__content_type=ContentType.objects.get(app_label="articles", model="article"), comment_comments__object_pk="12").distinct()

如果您想拥有用户ID,请使用values_list或values

之类的内容
User.objects.filter(comment_comments__content_type=ContentType.objects.get(app_label="articles", model="article"), comment_comments__object_pk="12").distinct().values_list('id')

希望它有所帮助。

答案 1 :(得分:0)

Django也是一个明智的选择,但是你需要不再考虑SQL,而是要问问自己你真正希望实现的目标。

“我想要一个已发布评论的所有用户ID的列表。”那么,那就是你要求的:

 Comment.objects.filter(
    content_type_id=foo, object_pk=bar
 ).values_list('user_id', flat=True).distinct()