2017-06-21 96 views
0

對象使用Django〜= 1.11和Python 3.6在Django模型

的總計數我是初學者!我在網上找到的每個答案都比我想要的更先進。

這裏是我的模型:

class Byte(models.Model): 
    text = models.CharField(max_length=30) 

    def __str__(self): 
     return self.text 

這是我的觀點:

def byte_list(request): 
    bytes = Byte.objects.order_by('text') 
    return render(request, 'cloudapp/byte_list.html', {'bytes': bytes}) 

這裏是我的模板:

{% block content %} 
    <div class="total"> 
     <h2>Total number of words and phrases entered: {{ byte.count }}</h2> 
    </div> 
<hr> 
{% for byte in bytes %} 
    <div class="byte"> 
     <h2>{{ byte.text }}</h2> 
    </div> 
{% endfor %} 
{% endblock %} 

這允許/管理員創建 「字節」 的對象,只有一個字段 - 一個小文本字段。現在,模板只顯示所有創建的對象的列表。

問題/問題:我想顯示爲Byte模型創建的對象的總數/計數。在模板中,我有一個標籤{{byte.count}}來顯示它。

我試過使用count()和Aggregation,但不知道如何將這些工作到我的模型/視圖/模板。我正在尋找最簡單和最新的方法來實現這一點,無論是在模型中使用方法或@property還是在視圖中設置某種類型的查詢。

回答

1

沒有錯與Exprator的答案,但一個替代方案是使用內置的length模板過濾器:

<h2>Total number of words and phrases entered: {{ bytes|length }}</h2> 

如果你不打算遍歷bytes查詢集,你也對他直接在模板調用count

<h2>Total number of words and phrases entered: {{ bytes.count }}</h2> 

這將迫使第二個數據庫查詢但是,只有在不引起bytes評估的情況下才這樣做。

關於在視圖中放置什麼以及如何處理模板過濾器/無參數方法的決定更多的是風格問題而不是硬性規則。在使用視圖方面犯的錯誤通常是正確的,在這裏很簡單,我可以在模板中完成。

+0

謝謝!我忘了模板中的過濾。事情是...我想在另一個計算中使用這個值。我忘了提這個。 –

+0

如果你正在對它進行計算,那麼一定要在視圖中進行計算。 –

+0

感謝您的幫助 –

2
def byte_list(request): 
    byte= Byte.objects.count() 
    bytes = Byte.objects.order_by('text') 
    return render(request, 'cloudapp/byte_list.html', {'bytes': bytes,'byte':byte}) 

而且在模板

{{ byte }} 
+0

一般來說,但文檔建議將queryset加載到內存中,如果您需要查詢集,則使用'len'。如果你不加載它,'count()'比'len'更快,但是這裏需要'bytes',所以'{'bytes':bytes,'byte_count':len(bytes)}'可能會更快地出現。 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#count –

+0

謝謝。我將如何渲染這個模板?如果我做出這個改變,它什麼也不顯示。 –

+0

無論您在上下文中使用什麼鍵詞(@ Exprator版本中的字節,我的評論中的byte_count)都將作爲上下文變量提供,所以只需「{{byte_count}}」即可。 –

1

你有一些不同的選擇......最常見的方式來獲得我所看到的模型實例的總數爲:

my_total = len(Byte.objects.filter()) 

或者,無需運行完整查詢:

my_total = Byte.objects.count() 

這裏的資源文件連結爲1.11:https://docs.djangoproject.com/en/1.11/topics/db/aggregation/#cheat-sheet

+0

謝謝。這會放在模型或視圖中嗎? –

+0

當然,在視圖中,您實際上想要使用返回的值執行某些操作......例如,您可以有50個實例,然後在視圖中運行以上代碼並將變量'my_total'傳遞到您的模板或任何其他否則,說「你有{{my_total}}字節對象」。 – Doug

+0

謝謝。我的眼睛開闊了。 –