5

Używam ogólnego widoku object_list, aby szybko wyświetlić listę artykułów. Do każdego artykułu dołączono komentarze. Kwerenda używa adnotacji do Count() liczby komentarzy, a następnie order_by() tego przypisanego numeru.Jak filtrować/wykluczać nieaktywne komentarze z mojego adnotowanego zapytania Django?

'queryset': Article.objects.annotate(comment_count=Count('comments')).order_by('-comment_count'), 

Komentarze są częścią ram django.contrib.comments i są dołączone do modelu za pomocą Generic związku. Dodałem wyraźne odwrotne wyszukiwanie do mojego modelu artykułu:

class Article(models.Models): 
    ... 
    comments = generic.GenericRelation(Comment, content_type_field='content_type', object_id_field='object_pk') 

Problem polega na tym, że liczą się "nieaktywne" komentarze; te, które mają is_public=False lub is_removed=True. Jak mogę wykluczyć zliczanie wszelkich nieaktywnych komentarzy?

Odpowiedz

2

W tym artykule wyjaśniono, jak to zrobić. Trzeba użyć filter klauzulę, upewniając go umieścić po się annotate klauzuli:

Article.objects.annotate(comment_count=Count('comments')).filter(
    comment__is_public=True, comment__is_removed=False 
).order_by('-comment_count') 
+0

nie miałoby to artykuły filtry podstawie tego, czy mają one publicznych/usuniętych komentarzy? – Jiaaro

+0

Wygląda na to, że zadziałało, ale zamierzam przeprowadzić pewne śledztwo, aby upewnić się, że Jim nie powiedział, że się nie dzieje. – Soviut

+0

Jednym z efektów ubocznych, które zauważyłem, jest to, że TYLKO zwraca artykuły, które mają komentarze, a te bez są wykluczone. – Soviut

Powiązane problemy