2017-10-19 121 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

相關問題