2010-04-23 3 views
2

이것이 원시 SQL 인 경우 쉽게 생각할 수 있지만 장고에서는 찾기가 어렵다는 것을 알 수 있습니다. 내가 원한 것은 이것입니다.Django에서 단순한 group-by (카운트 없음)

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

그것은 마지막 두 줄입니다. 나는 이것을 "Django-way"라고하고 싶다. 그러나 내가 발견 한 유일한 것은 집계와 주석에 대한 언급이다. 나는이 문제를 해결할 것이라고 생각하지 않는다. 누군가 나에게이 사실을 설명 할 수 있다면 정말 고맙겠습니다.

답변

2

(제 말).

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 같은 것들을 사용하려면 또는

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보다 훨씬 복잡해 보인다. 팁 주셔서 감사합니다, 그것은 매력처럼 작동합니다 :-) –

0

장고에서 생각할 필요가 없지만 SQL의 관점에서 생각해 보는 대신 자신이 실제로 원하는 것을 스스로 생각해 내야합니다.

"댓글을 게시 한 모든 사용자 ID의 목록을 원합니다." 그럼, 그건 당신이 무엇을 물어 : 난 당신이 특정 GenericObject의 모든 댓글의 저자을 갖고 싶어 볼 수 있듯이 지금까지

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

그런 종류의 작품. 사용자 ID 목록을 올바르게 반환했지만 모두 그룹화하지 않았습니다. 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] –

+0

죄송합니다. '별개 '. 업데이트 됨. –

+0

나는 그것을 시도했다, 아직도 기쁨이 없다. 나는 .distinct()가 user_id뿐만 아니라 테이블의 모든 값을 비교한다는 가정하에 작업한다고 가정합니다. 그러나 예 .distinct()를 사용해도 결과는 동일한 사용자 ID 목록입니다. –