首页 > 解决方案 > 更改为 UUID 作为 pk 触发表单“不可编辑字段”错误

问题描述

我正在尝试将我们的项目移至 UUID 字段主键。我创建了一个分支,删除了所有迁移和数据库,并在遇到新错误时尝试进行迁移。

根据文档,我在我们的站点 Abstract Base Class of Model 中将 id 设为一个显式字段:

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

我很惊讶这会导致fields属性中包含“id”的 ModelForms 出现新错误。错误说:

```django.core.exceptions.FieldError: 'id' cannot be specified for Statement model form as it is a non-editable field```

我从一个表单中删除了“id”,但对于其他表单/表单集的功能来说,主键与 POST 数据一起返回似乎非常重要。Django 隐式 'id' 整数自动字段不可编辑,但我们之前没有收到此错误,我们仍然没有fields = '__all__'设置 where。

标签: djangodjango-modelsdjango-forms

解决方案


首先,如果相关,您需要从类表单字段列表中删除不可编辑的字段。

然后更新您的模型管理员以使您的 id 为只读:

class YourModelAdmin(admin.ModelAdmin):
    readonly_fields=('id',)
    form = YourModelModelForm # if relevant, otherwise keep the readonly_fields 

推荐阅读