2017-10-19 86 views
1

我是相当新到Python/Django和我有以下问题。如何访问稍后为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美孚有多个酒吧和1条有多个FooBaroos:我有如下的结构我的模特。我想要的是用Django创建一个表格,其中我有一个Bar类的完整概述。我想要展示的一件事是所有酒吧的FooBarooInts的总和。如果我不过增加一个属性栏,需要所有相关FooBaroo对象(通过objects.all()。过滤器()),它结束了没有返回在大多数情况下任何东西,但不是所有的(我觉得奇怪)。

有谁知道我应该怎么解决这个问题的想法?

+1

你不需要的属性,Django的已经通过反向关系提供为你:'my_bar.foobaroo_set.all()'。 –

+0

帮助我。谢谢! – Don

回答

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... 
+0

这就是我一直在寻找的。谢谢 :) – Don

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 
0

我认为你可以这样做:

obj.foobaroo_set.values_list( 'FooBarooInts')

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

你可以看到更多的细节herehere

相关问题