簡體   English   中英

返回十六進制UUID作為Django模型charfield的默認值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM