期間分配模型的研究類字段的值,我可以做到這一點:Django的:實例
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__
函數中設置代碼,如果它沒有設置,但似乎是不合邏輯的,所以我喜歡避免它。
好的,這聽起來邏輯上關於'__init__'。我想,我已經找到了我的問題的解決方案:我必須重寫'save'函數並設置'code',如果它尚未設置。 'AutoField'不適合我的問題,因爲我需要一個隨機值而不是遞增值。 (對不起,我簡化了我的例子太多了。) – t777