我有一個模板變量product_list
,這是一個QuerySet
的Product
對象; Product
對象反過來具有一對多的對象Track
對象(當然,從Track
反向映射),這可能是空的。我想創建的Track
個列表,通過Product
就像這樣分組:只插入分隔符,如果之前沒有插入一個
{% for product in product_list %}
{% if this is not the first product with tracks %}
<li class="separator"></li>
{% endif %}
{% for track in product.tracks %}
<li>{{track}}</li>
{% endfor %}
{% endfor %}
的問題是,我應該怎麼寫的if this is not the first product with tracks
?我嘗試了ifchanged product
,但它甚至在第一次迭代中插入了分隔符(因爲它從""
更改爲"someproduct"
)。 forloop.counter
在這裏也不可用,因爲前兩種產品可能沒有軌道。
一個解決辦法可能是改變product_list
到track_list
這樣的:
track_list = Track.objects.order_by('product__name')
所以我的確可以使用ifchanged
。在我的情況下是可行的,但我仍然對第一種方法的解決方案感興趣。
這不是一個視圖,但是,增加了變量的模板,背景處理器,但肯定的,那就是贏得了烹調方法。如果在高負載時速度足夠快,我仍在測量,但它似乎正在工作。 – GergelyPolonkai
對不起,我正在度假。我採取第二種方法,預先烹飪我的數據;似乎這個問題不能純粹用模板邏輯解決。 – GergelyPolonkai
忘記添加我的烹飪方法(在視圖或上下文處理器中):'product_list.filter(tracks__isnull = False).distinct()'。 'distinct()'是必需的,因爲如果沒有那些產品將在QuerySet中爲