2012-08-16 90 views
7

我正在使用ModelForms爲網站創建表單,但我希望更多地控制選擇框中顯示的文本。Django選擇表單字段的標籤

一個例子模型可能看起來像這樣

class Test(models.Model) 
    ID = IntegerField() 
    Label = CharacterField() 
    recipient = ForeignKey(Person) 
    product = ForeignKey(Product) 

所以,我的問題是,當我提出這個模型的的ModelForm,外鍵字段被拍成選擇字段,具有的主鍵基礎值中的對象以及顯示的文本是來自對象__unicode__()方法的文本。在這種情況下,只顯示產品ID(這是一個序列號碼,這對用戶來說沒有意義)。我希望能夠製作一個自定義標籤,如「[序列號],[產品名稱]」。

我似乎無法找到正式的Django文檔上的任何指針,所以我想知道是否有人會幫忙? :)

+0

不能更改'模型顯示什麼預期的__unicode__'方法? – Rohan 2012-08-16 06:14:42

+0

這將是顯而易見的解決方案,但unicode方法在整個網站中使用很多,重要的是它只顯示序列。所以這不是一種選擇,我很害怕 – Eldamir 2012-08-16 06:23:47

回答

7

檢查出Django docs regarding the ModelChoiceField。報價:

模型的__unicode__方法將被調用來生成字符串在該領域的選擇使用對象的 表示;到 提供自定義的表示,子類ModelChoiceField和 覆蓋label_from_instance。此方法將收到一個模型對象, 並應返回一個適合於表示它的字符串。例如:

class MyModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return "My Object #%i" % obj.id 
+0

這看起來像是什麼東西,可能會起作用。我會檢查出它 – Eldamir 2012-08-16 06:35:02

+0

它工作出色。謝謝哥們 – Eldamir 2012-08-16 06:50:45