Как получить количество всех объектов, заданных с указанным значением c в поле в шаблоне Django? - PullRequest
0 голосов
/ 07 марта 2020

Я хочу получить количество всех установленных объектов, False для поля объекта adult.

Я зациклился на модели "Семейство" в моем шаблоне:

class Family(models.Model):
    name = models.CharField(max_length=255)

class Person(models.Model):
    family = models.ForeignKey(Family, on_delete=models.CASCADE, related_name='person', related_query_name='person')
    adult = models.BooleanField()

Вот что я хочу достичь в шаблоне:

# views.py
families = Family.objects.all()
# index.html

{% for family in families %}
    {{ family.name }} has {{ family.person(adult=False).count() }} non-adults!
{% endfor %}

1 Ответ

3 голосов
/ 07 марта 2020

Если я вас правильно понимаю, я думаю, что вашу проблему лучше всего решить с помощью аннотаций django (подробности см. В документах ).

С вашей точки зрения, аннотируйте каждый объект Family с помощью число взрослых:

families = Family.objects.annotate(non_adults=Count('person', filter=Q(person__adult=False)))

Тогда вы можете просто использовать эту аннотацию в своем шаблоне

{% for family in families %}
    {{ family.name }} has {{ family.non_adults }} non-adults!
{% endfor %}

С аннотациями вы можете использовать мощь базы данных, которая часто более эффективна, чем запросы и делать дополнительные вещи в python.

...