django - ModelChoiceField() 上的“to_field_name”参数似乎不起作用

标签 django django-forms

嗯,几乎就是标题中所说的。

我正在创建一个 ModelChoiceField()在我的其中之一 Forms ,像这样:

class FormCreatePlace(forms.ModelForm):
    (...)
    category = forms.ModelChoiceField(queryset=Category.objects.all(), to_field_name='name')
    (...)
Category模型定义如下:
class Category(models.Model):
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=40)

然而,HTML 表单上的字段本身坚持将主键(一系列 UUID)显示为选项。

我究竟做错了什么?

最佳答案

to_field_name用于更改选项的值,而不是显示的文本

更改显示文本的最简单方法是更改​​ __str__模型上返回 name 的方法 field :

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

但是,这将影响类别在其他地方的显示方式。如果你不想这样做,你可以子类化 ModelChoiceField并覆盖 label_from_instance .
class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.name

然后在表单中使用您的选择字段。
class FormCreatePlace(forms.ModelForm):
    (...)
    category = forms.MyModelChoiceField(queryset=Category.objects.all())

ModelChoiceField 文档以获取更多信息。

关于django - ModelChoiceField() 上的“to_field_name”参数似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49114304/

相关文章:

django - django 中的 makemigrations 损坏

css - 当输入在标签内时,什么 CSS 选择器可以修改复选框标签?

python - 向 Django 应用程序添加简单搜索

mysql - django 过滤器正则表达式在 python 重新工作时不起作用

python - Django Forms,给request.user设置一个初始值

Django - 完整性错误 : null value in column "user_id" violates not-null constraint

css - 如何将css添加到django中的默认表单元素

python - 在django中下载和保存文档的问题

django - Django 如何在使用syncdb 命令时跳过应用程序

python - 如何使用自定义连接器正确终止 Django 中的 MySQL/MariaDB 连接