Для цикла, чтобы найти совпадающие значения и итоги в Python - PullRequest
2 голосов
/ 22 октября 2019

У меня есть проект Django, где моя модель манифестов состоит из кодов предметов и количества. Я хочу просмотреть модель и найти общее количество для каждого кода товара. Таким образом, у меня есть следующее на мой взгляд:

manifest = Manifests.objects.all()

Как я могу использовать цикл for или что-то для суммирования количества для каждого кода товара. Или, если быть более понятным, если код товара 10 присутствует 3 раза с количествами = 1, 2 и 3. Всего должно быть 6 для кода товара 10, а если код товара 20 присутствует дважды с количеством = 2, то 5 должно быть 7.

Вот модель для справки:

models.py

class Manifests(models.Model):


    reference = models.IntegerField()
    quantity = models.IntegerField()
    item_code = models.ForeignKey(Products, default=None, blank=True, null=True)

1 Ответ

5 голосов
/ 22 октября 2019

Пожалуйста, сделайте , а не используйте for петли. Вы можете аннотировать ваш набор запросов Products с помощью:

from django.db.models import Sum

Products.objects.annotate(
    total_quantity=<b>Sum('manifests__quantity')</b>
)

* * * * * * Объекты Products, которые возникают из этого набора запросов, будут иметь дополнительный атрибут .total_quantity, который будет содержать сумму .quantity s связанные Manifests s объекты.

Или вы можете считать только Manifests объекты с reference=10 с помощью:

from django.db.models import Sum, Q

Products.objects.filter(
    <b>Q(manifests=None) | Q(manifests__reference=10)</b>
).annotate(
    total_quantity=Sum('manifests__quantity')
)

Примечание : обычно название модели в единственном числе , поэтому Manifest вместо Manifests и Product вместо Products.

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