我正在使用以下表格:
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)
如何更改表单字段中显示的值?
请参阅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)