Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Django UUIDField的editable=False是可编辑的?_Python_Django_Python 3.x_Django Models - Fatal编程技术网

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

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.

我想使UUID字段在Django中不可编辑,我使用UUID作为静态文件的名称,如果相应的UUID被更改,则会丢失其完整性。我试图将UUID设置为只读(在shell上,不关心表单和管理),这样在定义模型后就不会有任何更改

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)