У меня есть модель Porumbei, и у нее есть поле пола. В шаблоне я должен представить число Порумбеев каждого пола. Например: Мужской = x Порумбей, Женский = y Порумбей и Неизвестный = z Порумбей.
Моя модель
class Porumbei(models.Model):
SEXE = [
('Mascul', 'Mascul'),
('Femelă', 'Femelă'),
('Pui', 'Pui')
]
...
gender = models.CharField(max_length=6, choices=SEXE, db_index=True)
...
Всего у меня есть:
total = Porumbei.objects.count()
Ниже вот что у меня сейчас:
@staticmethod
def masculi(crescator=None):
""" Numarul de masculi din sistem """
mascul = Porumbei.objects.filter(gender="Mascul", is_active=True, crescator=crescator)
return len(mascul)
@staticmethod
def femele(crescator=None):
""" Numarul de femele din sistem """
femela = Porumbei.objects.filter(gender="Femelă", is_active=True, crescator=crescator)
return len(femela)
@staticmethod
def pui(crescator=None):
""" Numarul de pui din sistem """
pui = Porumbei.objects.filter(gender="Pui", is_active=True, crescator=crescator)
return len(pui)
Эти функции дают мне то, что я хочу, но, с моей точки зрения, не очень хорошо оптимизированы. Это закончится тремя подобными запросами, как я видел на django панели инструментов отладки. У меня вопрос, как я могу получить количество каждого пола только в одном запросе. Возможно ли с помощью другого метода или эта функция может быть оптимизирована для выполнения одного запроса в базе данных? Я должен упомянуть, что с числом каждого пола должны быть выполнены арифметические операции c. Например, сколько всего составляет каждый пол. Заранее спасибо!