Django模型专栏

时间:2013-07-13 19:58:57

标签: python django

如何让模型字段从函数返回默认值?

class Q(models.Model):
    _random_id = models.CharField(max_length=18)

    @property
    def random_id(self):
        return self._random_id

    @random_id.setter
    def random_id(self):
        self._random_id = f()

1 个答案:

答案 0 :(得分:1)

来自documentation for default

  

这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。

所以,你可以传递一个函数:

_random_id = models.CharField(max_length=18, default=f)

Q是django中内置的名称,因此最好不要将它用于您的模型。

此外,

@property
def random_id(self):
    return self._random_id

这只是作为语法糖,因为您可以直接从模型实例引用_random_id字段:

foo = Q()
foo._random_id

所以你应该考虑完全删除这个属性;如果您需要random_id,请将其设置为您的字段名称。