我想使UUID字段在Django中不可编辑,我将uuid用作静态文件的名称,如果更改了相应的UUID,它将失去其完整性。我试图将UUID设置为只读(在Shell上,不关心表单和管理),以使任何东西都永远不要更改定义后的模型的uuid。
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
答案 0 :(得分:4)
答案 1 :(得分:1)
您可以覆盖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)