Django的标签选择表单字段

Eld*_*mir 9 python forms django select labels

我正在使用ModelForms为网站制作表单,但我想要更多地控制选择框中显示的文本.

示例模型可能如下所示

class Test(models.Model)
    ID = IntegerField()
    Label = CharacterField()
    recipient = ForeignKey(Person)
    product = ForeignKey(Product)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,当我创建这个模型的modelForm时,外键字段被制作成选择字段,其中底层值具有对象的主键,显示的文本是来自对象__unicode__()方法的文本.在这种情况下,仅显示产品ID(这是一个序列号,这对用户没有意义).我希望能够制作一个自定义标签,如"[serial],[product name]".

我似乎无法找到官方Django文档的任何指针,所以我想知道是否有人会帮助?:)

Tor*_*cht 9

查看有关ModelChoiceFieldDjango文档.引用:

__unicode__将调用模型的方法以生成对象的字符串表示,以用于字段的选择; 提供自定义表示,子类ModelChoiceField和覆盖label_from_instance.此方法将接收模型对象,并应返回适合表示它的字符串.例如:

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "My Object #%i" % obj.id
Run Code Online (Sandbox Code Playgroud)