Django Агрегирование с моделью, имеющей два поля внешнего ключа, указывающие на одну и ту же внешнюю модель? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть эта модель:

from reviews.models import *
from django.db.models import Count

class Review(models.Model):
    user = models.ForeignKey('core.User')
    status = models.CharField(default='5 star', max_length=100)
    reviewed_date = models.DateField(default=datetime.date.today, blank=True, null=True)
    reviewer = models.ForeignKey('core.User', related_name='reviewer', null=True)

Я могу перечислить лучшие 5 Review.user's с большинством отзывов, как это:

for u in User.objects.annotate(num_reviews=Count('review')).order_by('-num_reviews')[:5]:
...    print u.login, u.num_reviews, u.title
...    
bobby 395 Manager
paul 377 Project Manager
micheal 283 Program Manager
kim 252 Engineer
goober 210 Engineer

Но как я могу перечислить лучшие 5 Review.reviewers

1 Ответ

1 голос
/ 10 марта 2020

В вашем случае это

for u in User.objects.annotate(num_reviews=Count('reviewer')).order_by('-num_reviews')[:5]:
...    print u.login, u.num_reviews, u.title

Я думаю, что проблема здесь в связанном имени reviewer, которое вас смутило. Его следовало назвать как reviewed_reviews, что более понятно и понятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...