代码之家  ›  专栏  ›  技术社区  ›  mpen

模型字段的随机/非常量默认值?

  •  7
  • mpen  · 技术社区  · 14 年前

    我有一个像这样的模型

    class SecretKey(Model):
        user = ForeignKey('User', related_name='secret_keys')
        created = DateTimeField(auto_now_add=True)
        updated = DateTimeField(auto_now=True)
        key = CharField(max_length=16, default=randstr(length=16))
        purpose = PositiveIntegerField(choices=SecretKeyPurposes)
        expiry_date = DateTimeField(default=datetime.datetime.now()+datetime.timedelta(days=7), null=True, blank=True)
    

    key 是一个随机的16个字符的字符串。问题是,我认为这个值正在被缓存,并且在一行中被多次使用。有没有办法每次都换一根线?(我不关心唯一性/冲突)

    1 回复  |  直到 14 年前
        1
  •  11
  •   Daniel Naab    10 年前

    是的,默认值仅在初始化模型元类时设置,而不是在创建SecretKey的新实例时设置。

    callable ,在这种情况下,每次创建新实例时都会调用该函数。

    def my_random_key():
        return randstr(16)
    
    class SecretKey(Model):
        key = CharField(max_length=16, default=my_random_key)
    

    当然,您也可以在模型的 __init__ 函数,但可调用项更干净,仍然可以使用标准语法,如 model = SecretKey(key='blah')