我在網上發現了很多關於此主題的類似帖子,但沒有人明確指出哪個是問題。在Django中使用classmethod設置字段的默認值
代碼
class Item(models.Model):
@classmethod
def get_next_item_number(cls):
return cls.objects.count() + 1
number = models.IntegerField(default=get_next_item_number)
問題
當我訪問Django管理面板相關的 '數字' 域中的文本字段包含
<classmethod object at 0x7fab049d7c50>
所以我試圖改變以上代碼
class Item(models.Model):
@classmethod
def get_next_item_number(cls):
return cls.objects.count() + 1
number = models.IntegerField(default=get_next_item_number())
但是當我運行Django的服務器我得到:
number = models.IntegerField(default=get_next_item_number())
TypeError: 'classmethod' object is not callable
我知道這一切可以通過聲明get_next_item_number()作爲外部功能來防止,但是這種解決方案是不優雅我,因爲get_next_item_number()是指只有Item類。
有沒有我失蹤的解決方案?您Item
類
看看:http://stackoverflow.com/questions/3786987/class-based-default-value-for-field-in-django-model-inheritance-hierarchy – xecgr 2014-09-02 12:07:40
這些解決方案不提供默認值時我構建了與Item模型關聯的ModelForm。我寧願使用外部函數。 – Sirion 2014-09-02 12:16:55