Django ';至"字段"名称';ModelChoiceField()上的参数不';我好像不工作
好吧,和标题里说的差不多 我正在我的一个Django ';至"字段"名称';ModelChoiceField()上的参数不';我好像不工作,django,django-forms,Django,Django Forms,好吧,和标题里说的差不多 我正在我的一个表单中创建一个modelcooicefield(),如下所示: class FormCreatePlace(forms.ModelForm): (...) category = forms.ModelChoiceField(queryset=Category.objects.all(), to_field_name='name') (...) 类别模型的定义如下: class Category(models.Model):
表单中创建一个modelcooicefield()
,如下所示:
class FormCreatePlace(forms.ModelForm):
(...)
category = forms.ModelChoiceField(queryset=Category.objects.all(), to_field_name='name')
(...)
类别
模型的定义如下:
class Category(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=40)
然而HTML表单上的字段本身坚持显示主键(一系列UUID)作为选项
我做错了什么?to_字段_name
用于更改选项的值,而不是显示的文本
更改显示文本的最简单方法是更改模型上的\uu str\uu
方法,以返回名称
字段:
class Category(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=40)
def __str__(self):
return self.name
但是,这将影响类别在其他位置的显示方式。如果您不想这样做,可以将modelcooicefield
子类化,并覆盖来自\u实例的label\u
class MyModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return obj.name
然后在表单中使用您的选择字段
class FormCreatePlace(forms.ModelForm):
(...)
category = forms.MyModelChoiceField(queryset=Category.objects.all())
有关更多信息,请参阅文档。这是一个非常好的回答,并提供了很好的建议,因为在我的模型上更改\uuu str\uuuu
可能会在其他地方产生影响。谢谢阿拉斯代尔,谢谢你的建议。他们应该为displayname创建一个新的参数。默认的displayname对用户不友好,因此没有多少人会使用它。@Django开发人员邮件列表中的user3042674关于向模型选择字段添加参数。