Zul*_*tra 3 python django uuid hex
我试图用从 uuid4 生成的标识符创建一个模型。但是我想要的不是常规 uuid,而是标识符具有十六进制 uuid 格式(不带“-”)。这是我尝试过的:
class Model(models.Model):
identifier = models.CharField(max_length=32, primary_key=True, default=uuid.uuid4().hex, editable=False)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
def __str__(self):
return self.identifier
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
不是每次继承类实例化时都返回唯一的 id,而是返回相同的 id,因为uuid4(). 我试图将默认值从 to 更改uuid.uuid4().hex,uuid.uuid4.hex但似乎hex不能uuid4直接调用。那么从十六进制格式的 uuid 为我的标识符生成默认值的可能方法是什么?
你需要让它可调用
default=lambda: uuid.uuid4().hex
Run Code Online (Sandbox Code Playgroud)
更新
正如@ZulwiyozaPutra 指出的那样。迁移时解决方案失败,我完全忘记了 Django 无法序列化 Lambda。
解决方案是定义具有所需行为的新函数:
def hex_uuid():
return uuid.uuid4().hex
Run Code Online (Sandbox Code Playgroud)
并使用此函数作为可调用的默认参数:
identifier = models.CharField(default=hex_uuid, ...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2464 次 |
| 最近记录: |