我可以做这个:
counter = 0
class A(models.Model):
code = models.IntegerField(max_length=30, default=generate_code)
def generate_code():
counter += 1
return counter
但似乎是,分配是在模型类的初始化(加载)期间完成的,而不是在创建实例时完成,所以“代码”总是“1”。
在创建模型类的实例期间,如何自动为某个字段分配动态值?
如果我在覆盖__init__
函数中设置值,如下所示:
class A(models.Model):
def __init__(self, *args, **kwargs):
models.Model.__init__(self, *args, **kwargs)
self.code = self.generate_code()
代码在每次更新时都会更改。正如调试器向我展示的那样 __init__
,当我删除对象时,也会调用该函数。我真的不明白这个!
如果没有设置,我只能在__init__
函数中设置代码,但这似乎不合逻辑,所以我想避免它。