Django - 更改选择项显示

2 投票
1 回答
732 浏览
提问于 2025-04-16 21:52

我在使用 ModelForm。其中有一个字段是:

repertoire = models.ForeignKey(Repertoire)

我想改变这个字段的显示方式。现在它是用 __str__(在 Python 2 中是 __unicode__)来显示的,但我想显示的是名字和日期。

我该如何在 ModelForm 中做到这一点呢?

1 个回答

6

你可以创建一个新的类,继承自ModelChoiceField,然后重写里面的一个叫label_from_instance的方法,让它返回你想要的内容,比如乐谱的名称和日期。接着,在你的ModelForm里使用这个新的字段。

from django import forms

class RepertoireModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s - %s" % (obj.name, obj.date)

class MyModelForm(forms.ModelForm):
    repertoire = RepertoireModelChoiceField(queryset=Repertoire.objects.all())

撰写回答