下面的描述大大簡化了 - 它只是我們正在處理的更大問題的一部分,但是可以安全地忽略內部問題。在Django模板中處理表示邏輯
假設我們有以下型號: -
class Item(models.Model):
name = models.CharField(max_length=150)
value = models.DecimalField(max_digits=12,decimal_places=2)
class Person(models.Model):
name = models.CharField(max_length=150)
items = models.ManyToManyField(Item, through='AssignedItem')
class AssignedItem(models.Model):
person = models.ForeignKey(Person)
item = models.ForeignKey(Item)
value = models.DecimalField(max_digits=12,decimal_places=2)
所以基本上一個人可以被分配零個,一個或多個項目,每個已分配的項目的價值可以通過指定新值來覆蓋這個特定的人在through
模型中。
我們希望達到的目標是具有所有的Item.name
爲標題行,與標題行中一個額外列Person.name
HTML表。
每個Person
可具有一組不同的分配給他們的Person.items
因此預期,如果一個Person
尚未分配的Item
,對於Person
相應小區將是空白的(請參閱附圖像) 。
的問題是如何將正確的AssignedItem值對應的列。我們有一個項目的查詢集,我們在模板中循環創建標題行,然後我們有包含每個人的項目的列表列表。但是我們如何確保在相應的Item頭下面顯示正確的AssignedItem?
這是一種解決方法。但正如我所說,這是一個更大的流程的一部分,改變訂單預處理或後處理並不適合這種情況。但是,是的,我們會嘗試一下,看看是否可以重新排列和項目後處理,而不會嚴重影響後面的代碼。 – chefsmart 2010-10-27 17:50:25
或代替重新排序,請使用字典而不是列表,並將項目作爲索引。如果字典中存在值,則輸出值,否則顯示None。所以傑克值將變成:{'Item1':78,'Item2':45,'Item4':94,'Item5':72} – zsquare 2010-10-27 18:01:05