2010-04-23 58 views
2

如果這是原始SQL,那麼這將是一件不容易的事情,但在Django中,這證明很難找到。我真正想要的是:Django中的簡單分組(無計數)

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

這是最後兩行,這是問題所在。我想這樣做是「Django方式」,但我發現的唯一的事情是提及聚合和註釋,我不認爲解決這個問題......他們呢?如果有人能向我解釋這一點,我會很感激。

回答

2

至於我能看到你想擁有的特定GenericObject的所有意見的作者(說文)。

Django的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或值

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

這正是我所需要的,儘管對我來說,它似乎比SQL更復雜。感謝您的提示,它的作用就像一個魅力:-) – 2010-04-23 21:43:34

0

在Django中這是一個不容忽視的問題,但是您需要停止思考SQL,而是問自己實際上想要達到的目標。

「我想要發佈評論的所有用戶ID的列表。」那麼,這就是你問什麼:

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

那麼這樣的作品。它返回了一個用戶標識列表好吧,但它根本沒有對它們進行分組: Comment.objects.all()。filter(content_type = 48,object_pk =「88」)。values_list('user_id',flat = True) [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] – 2010-04-23 07:30:07

+0

對不起,需要添加'distinct'。更新。 – 2010-04-23 08:08:08

+0

我也嘗試過,仍然沒有快樂。我假設.distinct()工作的假設是比較表中的所有值,而不僅僅是user_id。但是,即使使用.distinct(),結果也是一個相同用戶標識的列表。 – 2010-04-23 09:12:52