我正在使用ModelForms为网站制作表单,但我想要更多地控制选择框中显示的文本。
示例模型可能如下所示
class Test(models.Model)
ID = IntegerField()
Label = CharacterField()
recipient = ForeignKey(Person)
product = ForeignKey(Product)
所以,我的问题是,当我创建这个模型的modelForm时,外键字段被制作成选择字段,它具有底层值中对象的主键,显示的文本是来自对象__unicode__()
方法。在这种情况下,仅显示产品ID(这是一个序列号,这对用户没有意义)。我希望能够制作一个自定义标签,如“[serial],[product name]”。
我似乎无法找到关于官方Django文档的任何指示,所以我想知道是否有人会帮忙? :)
答案 0 :(得分:8)
查看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