ModelChoiceField表单字段上的自定义标签

dio*_*nes 3 forms django

我正在使用以下表格:

class InvoiceModelForm ( forms.ModelForm ):

    u = forms.ModelChoiceField ( queryset = User.objects.all () )
Run Code Online (Sandbox Code Playgroud)

但是在表单字段中显示用户名.我想改变它以使用名字和姓氏.

我不想改变

def __str__(self):
    return self.username
Run Code Online (Sandbox Code Playgroud)

如何更改表单字段中显示的值?

tri*_*het 6

请参阅https://docs.djangoproject.com/en/2.0/ref/forms/fields/#modelchoicefield的最后一部分

将调用模型的str()方法以生成对象的字符串表示形式,以便在字段的选择中使用.要提供自定义表示,请继承ModelChoiceField并覆盖label_from_instance.

所以,在你的情况下你可以这样做:

from django.forms import ModelChoiceField

class NamesChoiceField(ModelChoiceField):

    def label_from_instance(self, obj):
        return '{firstname} {lastname}'.format(firstname=obj.first_name, lastname=obj.last_name)
Run Code Online (Sandbox Code Playgroud)

然后,

class InvoiceModelForm(forms.ModelForm):

   u = NamesChoiceField(queryset=User.objects.all())
Run Code Online (Sandbox Code Playgroud)