Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2010 13:53:30

chkur
От:
Зарегистрирован: 2010-01-07
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

ForeignKey и подсчет суммы - annotate Sum

Есть 2 связанные по ForeignKey модели. К примеру, такого вида:

class pidpr(models.Model):
pidpr = models.TextField()
suma_oplat = models.DecimalField(max_digits=10, decimal_places=3)

class obj(models.Model):
product = models.TextField()
pidpr = models.ForeignKey("pidpr", related_name="objs")
Нужно выбрать сумму полей suma_oplat для каждого manager при условии соответствия поля product какой-то величине. К примеру:
Всё работает при отсутствии условия ко второй таблице:
pidpr.objects.values("manager").annotate(Sum("suma_oplat"))
результат
[{'manager': 1, 'suma_oplat__sum': Decimal('700.000')}, {'manager': 2, 'suma_oplat__sum': Decimal('400.000')}]
Включаем фильтр:
pidpr.objects.filter(objs__product="22").values("manager").annotate(Sum("suma_oplat"))
выдает результат
[{'manager': 1, 'suma_oplat__sum': Decimal('1200.000')}]
Видно, что для выборки сумма больше, чем для всей таблицы. Cумма удваивается, утраивается в случае, если заданному условию в таблице obj имеется 2-3 записи, соответствующие одному полю pidpr.
distinct() не помогает.

Надеюсь, описал более-менее понятно. Пока спасаюсь такой конструкцией в цикле:
sum([i["suma_oplat"] for i in pidpr.objects.filter(objs__product="22",manager=<величина>).distinct().values("id", "manager", "suma_oplat")])
Другие варианты?



Офлайн

#2 Ноя. 25, 2010 09:49:48

chkur
От:
Зарегистрирован: 2010-01-07
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

ForeignKey и подсчет суммы - annotate Sum

Похоже на это: http://code.djangoproject.com/ticket/10060



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version