1
class Item(models.Model):
    name = models.CharField(max_length=50)
    item_price = models.DecimalField(max_digits=5, decimal_places=2)

class Magazine(models.Model):
    name = models.CharField(max_length=50)
    items = models.ManyToManyField('Item', blank=True, null=True)
    owner = models.ForeignKey(User, related_name='u_item')

雑誌のすべてのアイテムの価格の合計を取得するにはどうすればよいですか?

ビューで:

...
    user = request.user
    magazins = Magazine.objects.filter(owner= user)
...
4

2 に答える 2

1

まず、Djangoの集計を見てみましょう。

以下のようになります。

from django.db.models import Sum
owners_magazines = Magazine.objects.filter(owner='Your owner')
total = 0;
for magazine in owners_magazines:
    item_values_with_total = magazine.items.values().annotate(total=Sum('item_price'))
    total += <Read appropriately from item_values_with_total>

さらに、物事をグループ化することを試みることができます。戻り値にはtotal、必要な合計を持つと呼ばれるフィールドがあります。

編集 -

あなたはそれをよりよく理解するために非ORMソリューションを試すことができます

from django.db.models import Sum
    owners_magazines = Magazine.objects.filter(owner='Your owner')
    total = 0;
    for magazine in owners_magazines:
        all_items = magazines.items_set.all()
        for item in all_items:
            total += item.item_price

    print total
于 2012-09-28T10:17:55.370 に答える
1

集計を使用する:

from django.db.models import Sum

for m in Magazine.objects.all():
   total = m.items_set.all().annotate(total=Sum('item_price'))
   print 'Total cost for items in {0} is {1}'.format(m,total)
于 2012-09-28T10:18:41.663 に答える