Python 为什么Django UUIDField的editable=False是可编辑的?
我想使UUID字段在Django中不可编辑,我使用UUID作为静态文件的名称,如果相应的UUID被更改,则会丢失其完整性。我试图将UUID设置为只读(在shell上,不关心表单和管理),这样在定义模型后就不会有任何更改Python 为什么Django UUIDField的editable=False是可编辑的?,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我想使UUID字段在Django中不可编辑,我使用UUID作为静态文件的名称,如果相应的UUID被更改,则会丢失其完整性。我试图将UUID设置为只读(在shell上,不关心表单和管理),这样在定义模型后就不会有任何更改 class Car(models.Model): uuid = muuid = models.UUIDField(default=uuid.uuid4, editable=False) 所以当我尝试在shell中更改uuid时 >>> x = Car.
class Car(models.Model):
uuid = muuid = models.UUIDField(default=uuid.uuid4, editable=False)
所以当我尝试在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')
Django版本是2.1.7,数据库是PostgreSQL 10检查文档是否有错误
如果为False,则该字段将不会显示在admin或任何其他文件中
模型形式。在模型验证过程中也会跳过它们。默认为
对
这并不意味着不能从shell中更改该值。您可以覆盖save方法——在数据库中查找该值,并在保存之前将这些值设置为相同,如果它们不同的话
def save(self, *args, **kwargs):
if self.pk:
obj = Car.objects.values('uuid').get(pk=self.pk)
if obj.get('uuid') != self.uuid:
self.uuid = obj.get('uuid')
super().save(*args, **kwargs)