2015-12-08 7 views
0

Мне нужно получить сообщение или комментарий о пользователе в определенной группе.Django ORM аннотация с фильтром

Итак, я использую этот код. Это работает хорошо.

if model == 'post': 
    return _group.fbuser_set.filter(posts__group=_group).annotate(count=Count('posts')).order_by('-count') 
else: 
    return _group.fbuser_set.filter(comments__group=_group).annotate(count=Count('comments')).order_by(
        '-count') 

И я хочу получить как комментарий, так и комментарий о пользователе в конкретной группе.

Итак, я делаю этот код

_group.user_set.filter(posts__group=_group, comments__group=_group) \ 
.annotate(p_count=Count('posts'), c_count=Count('comments')) 

и этот код.

_group.user_set.filter(posts__group=_group) \ 
.annotate(p_count=Count('posts')).filter(comments__group=_group) \ 
.annotate(c_count=Count('comments')) 

Но оба они не работают. Это выкл.

Что я могу сделать для получения учёта в определенной группе?

Если мне нужно использовать raw sql, как я могу сделать sql о той же функции?

+0

Попробуйте добавить 'distinct = True' к вашим подсчетам следующим образом:' .annotate (p_count = Count ('posts', distinct = True)) ' – Leistungsabfall

+0

@Leistungsabfall, Спасибо! Это работает хорошо!! – egaoneko

ответ

0

@ совет Leistungsabfall в

_group.user_set.filter(posts__group=_group, comments__group=_group) \ 
      .annotate(p_count=Count('posts', distinct=True), c_count=Count('comments', distinct=True)) 

Он хорошо работает!

+0

Но это очень медленно. :( – egaoneko

Смежные вопросы