Django объединяет две модели экземпляров в один экземпляр для просмотра - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь объединить два разных (но похожих) экземпляра модели в один объект для работы с целью просмотра.Это очень простой пример того, что я пытаюсь сделать (но для более сложной модели со многими свойствами / функциями):

class Purchase(models.Model):
    user = models.ForeignKey(User)
    amount = models.DecimalField(...)
    timestamp = ...

    @property
    def taxes()
         ...
         return tax_amount

Теперь скажем, у нас есть 2 покупки, сделанные одним и тем же пользователем.Я хочу объединить эти два экземпляра, чтобы в пользовательском представлении все выглядело как один, но на самом деле это сумма двух моделей.Это включает в себя сумму полей модели, а также любые суммируемые свойства.Я не уверен, что произойдет с функциями в модели, которые не являются числовыми (но я в порядке, если они просто не работают для объединенного экземпляра).

1 Ответ

0 голосов
/ 21 февраля 2019
...
from django.db.models import Sum
From .models import Purchase
...

def get_total_purchase_amount(request, user_id):
    purchases = Purchase.objects.filter(user__pk=user_id).aggregate(Sum('amount'))
    print(purchases['amount__sum']

Так вы можете выполнять вычисления на наборах запросов.Обратите внимание на использование .aggregate().Я настоятельно рекомендую вам ознакомиться с Django документами по агрегации и аннотациям.Его доступно здесь .Помните, что aggregate() возвращает объект словаря, а не набор запросов.

...