私がすることができます:
counter = 0
class A(models.Model):
code = models.IntegerField(max_length=30, default=generate_code)
def generate_code():
counter += 1
return counter
しかし、インスタンスの作成時ではなく、モデル クラスの初期化 (ロード) 中に割り当てが行われるように思われるため、'code' は常に '1' です。
モデル クラスのインスタンスの作成中に、動的な値をフィールドに自動的に割り当てるにはどうすればよいですか?
次のように、オーバーライドされた関数に値を設定すると__init__
:
class A(models.Model):
def __init__(self, *args, **kwargs):
models.Model.__init__(self, *args, **kwargs)
self.code = self.generate_code()
コードは更新ごとに変更されます。デバッガーが表示 __init__
するように、オブジェクトを削除すると関数も呼び出されます。私は本当にこれを理解していません!
設定されていない場合は、関数にのみコードを設定できますが、__init__
それは非論理的であるように思われるので、避けたいと思います。