如何访问稍后为Django中的计算实例化的模型?

时间:2017-10-19 08:20:17

标签: python django models

我是Python / Django的新手,我有以下问题。我的模型结构如下:

class Foo:
    name = models.CharField(max_length=10)

class Bar:
    othername = models.CharField(max_length=10)
    othername2 = models.CharField(max_length=10)
    fkey = models.ForeignKey(Foo, on_delete:models.CASCADE)

class FooBaroo:
    FooBarooInt = models.IntegerField()
    Barkey = models.ForeignKey(Bar, on_delete:models.CASCADE)

关系是1 Foo有多个Bars,1个Bar有多个FooBaroos。我想要的是用Django创建一个表,其中我有一个Bar类的完整概述。我想要显示的一件事是Bar的所有FooBarooInts的总和。但是,如果我向Bar添加一个属性来获取所有相关的FooBaroo对象(通过objects.all()。filter()),它在大多数情况下都不会返回任何内容,但不是全部(我觉得很奇怪)。

有人知道我应该如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

使用related_nameaggregation

from django.db.models import Sum
class Bar:
    @property 
    def fb_int_sum(self):
        return self.foobaroo_set.aggregate(s=Sum('FooBarooInt')).get('s') or 0
        # return FooBaroo.objects.filter(Barkey=self).agg...

答案 1 :(得分:0)

query = FooBaroo.objects.filter(Barkey={some_id}).all() # List all values
query_sum = FooBaroo.objects.filter(Barkey={some_id})..aggregate(Sum('Barkey')) # Query to sum

答案 2 :(得分:0)

我认为你可以使用它:

obj.foobaroo_set.values_list(' FooBarooInts&#39)

在上面的" obj"是一个自定义栏,你想要总结它的FooBarooInts。 请注意,foobaroo_set必须为小写(即使您的模型名称不是)。

您可以查看更多详细信息herehere