Django将两个模型实例合并为一个实例以供查看

时间:2019-02-20 20:31:31

标签: python django python-3.x django-models django-views

我正在尝试将两个不同(但相似)的模型实例组合到一个对象中以供查看。这是我要执行的操作的一个非常基本的示例(但是对于具有许多属性/功能的更复杂的模型):

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

    @property
    def taxes()
         ...
         return tax_amount

现在说我们有2个由同一用户进行的购买。我想合并这两个实例,以便在用户视图中看起来只有一个实例,但这实际上是这两个模型的总和。这包括模型字段的总和以及任何可累加的属性。我不确定模型上不是数字的函数会发生什么(但是我很好,如果它们对组合实例不起作用)。

1 个答案:

答案 0 :(得分:0)

...
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文档。其可用的here。 请记住,aggregate()返回的是字典对象,而不是查询集。