2012-01-08 83 views
1

我在Django模板中使用重新分組標記來列出按客戶分組的多個項目。我的模型是:使用多個模型字段在Django模板中重新分組列表

class Customer(models.Model): 
    name = models.CharField(max_length=25) 
    city = models.CharField(max_length=25) 

我可以列出的項目customer.name(或customer.city),由我真正想要的是將它們順序「名稱,市」。根據文檔「任何有效的模板查找都是重組標記的合法分組屬性,包括方法,屬性,字典鍵和列表項」。 [1]如何爲此定義一個方法?我如何從我的模板中調用它?

[1] https://docs.djangoproject.com/en/dev/ref/templates/builtins/

更新:據我所知的重新組合的功能,並且現在正在使用它,我組使用對象的字段中的一個列表中。分隔符customer.grouper顯示該特定字段的名稱。在我的例子中是「customer.name」或「customer.city」。我的目標是將這些結合在一起,例如「customer.name,customer.city」(即「Microsoft,Redmond」)。文檔簡要提到了這一點,但我無法弄清楚。

def display_name(self): 
    return "%s, %s" (self.name, self.city) 

我已經試過上述方法,作爲我的客戶模型的一部分,以解決我的問題。但我不確定如何從我的模板中調用它。

+0

您能否詳細介紹一下您真正想要的東西。 – 2012-01-08 03:58:00

+0

現在問題已更新。 – matpe 2012-01-08 12:43:49

回答

2

你的模型功能是正確的,但它應該包含括號前%

def display_name(self): 
    return "%s, %s" %(self.name, self.city) 

你的觀點應該傳遞對象,而不是值的列表。

讓列表是tp,所以你的模板代碼應該是這樣的:

{% regroup tp by display_name as tp_list %} 

<ul> 
{% for t in tp_list %} 
    <li>{{ t.grouper }} 
    <ul> 
     {% for item in t.list %} 
      <...something of your code....> 
     {% endfor %} 
    </ul> 
    </li> 
{% endfor %} 
</ul> 

這應該制定出你不夠好。

+0

非常感謝!那些小細節... – matpe 2012-01-08 17:11:27

+0

我的榮幸......:D – 2012-01-09 04:27:02