从列表中访问模型实例的属性并将其添加在一起?

时间:2019-06-29 18:16:01

标签: python django

说我有一个模型:

class Mymodel(models.Model)
property = models.IntegerField()

说我有一个功能:

def func():
instance = Mymodel.objects.order_by('?')[0]
instance2 = Mymodel.objects.order_by('?')[0]
plan = [instance, instance2]
return plan

我想使用for循环将模型实例的“属性”中的整数加在一起,然后将总和输出到我的模板之一中?

我尝试了添加过滤器,但问题是将要添加在一起的实例数量是动态的,所以我不能简单地做myModel.0.property|add:myModel.1.property

谢谢。

编辑:

为此找到了解决方法:

在模板中,只需使用| length过滤器以及if语句即可

{% if instancelist|length == 2 %}
    {{ instancelist.0.property|add:instancelist.1.property }}
{% else %}
    {{ instancelist.0.property|add:instancelist.1.property|add:instancelist.2.property }}
{% endif %}

以此类推。

2 个答案:

答案 0 :(得分:1)

找到了解决此问题的方法:

在您的模板中,只需将 |length 过滤器与 if 语句一起使用:

{% if instancelist|length == 2 %}
    {{ instancelist.0.property|add:instancelist.1.property }}
{% else %}
    {{ instancelist.0.property|add:instancelist.1.property|add:instancelist.2.property }}
{% endif %}

答案 1 :(得分:0)

根据您的问题获取instanceinstance2属性字段的总和。您可以这样尝试:

    instance = Mymodel.objects.order_by('?')[0:1]
    instance2 = Mymodel.objects.order_by('?')[0:1]
    sum = 0
    for item in instance:
         sum += item.property
    for item1 in instance2:
         sum += item1.property
    return sum