2016-11-30 2 views
0

В моем приложении Django пользователи публикуют фотографии, сохраненные как photo объектов. Затем зрители могут публиковать комментарии под каждой фотографией, сохраненные как photocomment объекты, имеющие внешний ключ на объектах photo.Аннотирование количества уникальных объектов в Django ORM-запросе

Я пытаюсь написать запрос ORM, где каждый запрошенный объект фотографии, я добавляю количество уникальных комментариев, которые он получил. Уникальный подразумевает комментарий уникальным user_id. То есть если один и тот же парень/девушка прокомментировал 1000 раз, это еще один уникальный комментарий.

Как это сделать?


До сих пор, я придумал следующее:

relevant_photos = Photo.objects.filter(id=set_of_ids) 
PhotoComment.objects.filter(which_photo_id__in=relevant_photos).annotate(unique_comment_count=Count("submitted_by")).distinct("submitted_by") 

Я чувствую, что это не может работать, потому что я на самом деле не считая distinct комментаторов здесь. Каким будет правильный способ сделать это? Пытаюсь обернуть вокруг себя голову.

ответ

1

Вы должны использовать Count с order_by. Например,

PhotoComment.objects.annotate(count=Count("submitted_by", disntict=True)).order_by("submitted_by") 
1

Структура модели поможет, но это может роботи:

relevant_photos = Photo.objects.filter(id=set_of_ids) 
PhotoComment.objects.filter(which_photo_id__in=relevant_photos).annotate(unique_comment_count=Count("submitted_by", distinct=True)) 

Быть комментарий модель что-то вроде этого:

class Comment(models.Model): 
    ... 
    submitted_by = models.ForeignKey(User) 
    ...