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 表单

django - 表单中的动态选择字段

如何从 Django ModelChoiceField 查询集中选择值和标签

Django - 禁用表单选择字段验证

Django,如何从模型表单的选择字段中删除空白选择?