[英]Returning Hex UUID as default value for Django model charfield
我試圖用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
而不是每次實例化繼承的類時都返回唯一的ID,而是由於uuid4()
而返回相同的ID。 我試圖將默認值從uuid.uuid4().hex
更改為uuid.uuid4.hex
但似乎不能直接從uuid4
調用hex
。 那么從十六進制格式的uuid中為我的標識符生成默認值的可能方法是什么?
您需要使其可調用
default=lambda: uuid.uuid4().hex
更新
正如@ZulwiyozaPutra所指出的。 遷移時解決方案失敗,我完全忘了Django無法序列化Lambda。
解決方案是定義具有所需行為的新功能:
def hex_uuid():
return uuid.uuid4().hex
並將此函數用作可調用的默認參數:
identifier = models.CharField(default=hex_uuid, ...)
class Model(models.Model):
identifier = models.CharField(max_length=32, primary_key=True, default=uuid.uuid4, editable=False)
如果您使用uuid.uuid4(),該函數將在runserver上執行,只需提供簽名即可,其余的將由django完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.