2012-08-16 79 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