2017-10-07 53 views
0

我想這個問題已經被問了幾次了,但是,這些問題和他們的答案並不明確。如果你可以讓標題或下面的例子更清晰。請做。Django如何從視圖中的另一個模型獲取字段?

例如: 我有一個果園,在我的果園裏我有蘋果樹的領域,這些蘋果樹有蘋果。現在的問題是用我的模型:

  1. 我如何才能在某一領域蘋果數量?
  2. 該給定區域生產的所有蘋果的總質量

型號

class Field(models.Model): 
    size = models.PositiveIntergerField() 
    max_tree_number = models.PositiveIntergerField() 

class Tree(models.Model): 
    field = models.ForeignKey(Field) 
    date_of_planting = models.datefield(editable=False) 
    variety = models.CharField(max_length=200) 

class Apple(models.Model): 
    tree = models.ForeignKey(Tree) 
    mass = models.PositiveIntergerField() 

查看

class FieldView(generic.ListView): 
    template = '[app_name]/index.html' 

    def get_context_data(self, **kwargs): 
     context = super(FieldView, self).get_context_data(**kwargs) 
     context['tree_count'] = Field._meta.model_name 
     context['mass'] = ??? 
     context['apple_count'] = ??? 

謝謝您的時間

回答

2

您可以annotate您的查詢集與蘋果和質量的數量。

from django.db.models import Count, Sum 

def get_queryset(self): 
    queryset = super(FieldView, self).get_queryset() 
    queryset = queryset.annotate(num_apples=Count('tree__apple'), apple_mass=Sum('tree__apple__mass')) 
    return queryset 

然後,當循環查詢集時,您可以訪問帶註釋的字段。

{% for obj in object_list %} 
    {{ obj.size }}, {{ obj.num_apples }}, {{ obj.apple_mass }} 
{% endfor %} 

請注意,您還沒有任何補充的背景下get_context_data,所以你可能能夠從您的視圖中刪除。

+0

感謝您的幫助,但是我遇到了self.object問題。 >> AttributeError:'FIELDVIEW'對象沒有屬性'object'。我錯過了明顯的東西嗎? – TheSadPrinter

+0

對不起,我之前誤解了你的問題,並認爲你有一個特定的果園詳細視圖。你想知道哪個果園的結果?列表中的每個果園? – Alasdair

+0

最終目標是建立一個頁面。與該領域與旁邊的蘋果數量。 >>字段。蘋果。 >> Field1 100 >> field2 200 >>等等...你完全正確的問我,但self.object沒有返回一個對象。只是想知道是否缺少任何關鍵代碼來實現它。 – TheSadPrinter

相關問題