Django 选择表单字段的标签
Posted
技术标签:
【中文标题】Django 选择表单字段的标签【英文标题】:Labels for Django select form field 【发布时间】:2012-08-12 11:16:30 【问题描述】:我正在使用 ModelForms 为网站制作表单,但我希望更好地控制选择框中显示的文本。
示例模型可能如下所示
class Test(models.Model)
ID = IntegerField()
Label = CharacterField()
recipient = ForeignKey(Person)
product = ForeignKey(Product)
所以,我的问题是,当我制作这个模型的modelForm时,外键字段被制作成选择字段,在基础值中有对象的主键,显示的文本是来自的文本对象__unicode__()
方法。在这种情况下,只显示产品 ID(这是一个序列号,对用户没有意义)。我希望能够制作一个自定义标签,例如“[序列],[产品名称]”。
我似乎在官方 Django 文档上找不到任何指针,所以我想知道是否有人会提供帮助? :)
【问题讨论】:
你不能改变模型的__unicode__
方法来显示预期的内容吗?
这将是显而易见的解决方案,但是整个网站都使用了 unicode 方法,因此仅显示序列号很重要。所以这不是一个选择,恐怕
【参考方案1】:
查看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
【讨论】:
这看起来有点像,可能会起作用。我去看看 干净整洁。我喜欢。以上是关于Django 选择表单字段的标签的主要内容,如果未能解决你的问题,请参考以下文章
将Django Choices表单字段的详细名称传递给查看上下文
表单 ModelChoiceField 查询集 + 额外选择字段 django 表单