Найти - Пользователи
Полная версия: ForeignKey и подсчет суммы - annotate Sum
Начало » Django » ForeignKey и подсчет суммы - annotate Sum
1
chkur
Есть 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")])
Другие варианты?
chkur
Похоже на это: http://code.djangoproject.com/ticket/10060
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB