Учитывая эти две модели:Джанго Aggregation Через обратную связь
class Profile(models.Model):
user = models.ForeignKey(User, unique=True, verbose_name=_('user'))
about = models.TextField(_('about'), blank=True)
zip = models.CharField(max_length=10, verbose_name='zip code', blank=True)
website = models.URLField(_('website'), blank=True, verify_exists=False)
class ProfileView(models.Model):
profile = models.ForeignKey(Profile)
viewer = models.ForeignKey(User, blank=True, null=True)
created = models.DateTimeField(auto_now_add=True)
Я хочу, чтобы все профили отсортированные на общее количество просмотров. Я могу получить список профилей идентификаторов отсортированных на общем количество просмотров с:
ProfileView.objects.values('profile').annotate(Count('profile')).order_by('-profile__count')
Но это только словарь профильных идентификаторов, а это значит, тогда я должен петлю над ним и составить список объектов профиля. Который является количеством дополнительных запросов и по-прежнему не приводит к QuerySet. В этот момент я мог бы также перейти к необработанному SQL. Прежде чем я это сделаю, есть ли способ сделать это из модели профиля? ProfileViews связаны через поле ForeignKey, но это не так, как будто модель Profile знает об этом, поэтому я не уверен, как связать их вместе.
Как в стороне, я понимаю, что могу просто хранить представления как свойство в модели профиля, и это может оказаться тем, что я здесь делаю, но мне все еще интересно узнать, как лучше использовать функции агрегирования.
'from django.db.models import Count' – juanjo