борется с джанго перегруппировкой - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть две модели.

Проект и модель спонсоров.

Я хочу в основном выполнить запрос, который возвращает проекты с наибольшим количеством спонсоров.

Является ли перегруппировка единственным способом добиться этого?

class Project(models.Model):
    owner = models.ForeignKey(User)
    project_name = models.CharField(max_length=50, help_text='Lorem ipsum dolor sit amet.')

class Backer(models.Model):
    user = models.ForeignKey(User)
    project = models.ForeignKey(Project)
    amount = models.PositiveIntegerField()

Я пробовал следующее:

{% regroup backers by project as backers_list %}
{% for obj in backers_list %}
    <strong>{{ obj.grouper }}</strong><br />
{% endfor %}

хотя это возвращает больше ожидаемых результатов.

Итак, я хочу получить общее количество спонсоров, которые поддержали проект.

1 Ответ

4 голосов
/ 11 февраля 2011

Я не уверен, что вы делаете с regroup, но проект с наибольшим количеством спонсоров:

Project.objects.annotate(Count('backer')).latest('backer__count')

Использование аннотации http://docs.djangoproject.com/en/dev/topics/db/aggregation/

Если вы хотели10 наиболее поддерживаемых проектов, это будет

Project.objects.annotate(Count('backer')).order_by('-backer__count')[:10]

Обновление: Я вижу, вы могли бы иметь в виду «количество», как в поле Backer.amount, в этом случае вы быизмените запрос, чтобы использовать django.db.models.Sum.

Project.objects.annotate(amount = Sum('backer__amount')).order_by('-amount')[:10]
...