10

我正在使用 ModelForms 为网站制作表单,但我希望更好地控制“选择”框中显示的文本。

示例模型可能如下所示

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

所以,我的问题是,当我制作这个模型的modelForm时,外键字段被制作成选择字段,在底层值中有对象的主键,显示的文本是来自对象__unicode__()方法的文本. 在这种情况下,只显示产品 ID(这是一个序列号,对用户没有意义)。我希望能够制作像“[序列],[产品名称]”这样的自定义标签。

我似乎在官方 Django 文档上找不到任何指针,所以我想知道是否有人会提供帮助?:)

4

1 回答 1

10

查看有关 ModelChoiceField 的 Django 文档。引用:

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

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "My Object #%i" % obj.id
于 2012-08-16T06:31:11.990 回答