为什么带有 editable=False 的 Django UUIDField 是可编辑的?

Mar*_*rty 0 python django django-models python-3.x

我想让 UUID 字段在 Django 中不可编辑,我使用 uuid 作为静态文件的名称,如果相应的 UUID 更改,则会失去其完整性。我试图将 UUID 设为只读(在 shell 上,不关心表单和管理员),以便一旦定义模型的 uuid 就不应该更改。

class Car(models.Model):
    uuid = muuid = models.UUIDField(default=uuid.uuid4, editable=False)
Run Code Online (Sandbox Code Playgroud)

所以当我尝试更改 shell 中的 uuid 时

>>> x = Car.objects.first()
>>> x.uuid
    UUID('acd963cf-aa2f-4f44-988d-87091d492766')
>>> x.uuid = uuid.uuid4
>>> x.save()
>>> x.uuid
    UUID('1155ce6d-d783-4dc8-a970-a004dc63f3d8')
Run Code Online (Sandbox Code Playgroud)

Django 版本为 2.1.7,数据库为 PostgreSQL 10

gde*_*ef_ 5

检查可编辑字段的文档。

如果为 False,该字段将不会显示在管理员或任何其他 ModelForm 中。在模型验证期间它们也会被跳过。默认值为真。

这并不意味着不能从 shell 更改。