我刚刚添加了一个新的模型,我想在那里第一次使用UUID。我在python 3.8.10上运行Django 3.1.3。
我发现了一些关于这个的问题,我很确定我是按照这些建议来做的。然而,当我在那个模型中添加一个条目时(在phpmyadmin web-surface中),UUID并没有被添加,它只是保持为空。然而当我创建另一个条目时,我得到了错误,UUID字段不允许与其他地方相同(都是空的),这意味着至少unique=True是有效的。
另一件要提到的事情是,当我使用VSCode创建字段时,通常那些字段名是自动完成的,但是这一个不是这样的。我想这可能会给你一个提示。
我的模型如下所示:
from django.db import models
import uuid
class MQTTTable(models.Model):
uuid = models.UUIDField(primary_key = True, default = uuid.uuid4, editable = False, unique = True)
description = models.CharField(max_length= 100, default = None)
clientID = models.CharField(max_length = 50, default = None)
mastertopic = models.CharField(max_length = 200, default = None)
4条答案
按热度按时间vptzau2j1#
default = uuid.uuid4
是Django ORM的默认值,数据库不会像ID
那样自动递增,所以如果你通过phpmyadmin添加一个条目,它不会设置uuid字段。gab6jxml2#
您将需要像这样进行迁移,以便填充现有条目的字段。请访问此了解如何操作。创建新对象时,字段将使用python方式自动填充。谢谢添加唯一字段的迁移
您可以访问此问题,它可能会帮助您的答案:Automatically fill pre-existing database entries with a UUID in Django
rdlzhqv93#
基本上,你不能在php管理面板中添加一个条目,并期望django添加UUID,因为UUID是由Django设置的,而不是由数据库设置的。你可以尝试在www.example.com文件中实现一个函数model.py,并将其序列化为一个Charfield的源代码,但在这种情况下,你需要django rest框架
6uxekuva4#
将
default = uuid.uuid4
更改为default = uuid.uuid4()