【发布时间】:2023-03-08 01:58:01
【问题描述】:
我在网上找到了很多关于这个主题的类似帖子,但没有一个明确说明问题所在。
代码
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 模型关联的 ModelForm 时,这些解决方案不提供默认值。我宁愿使用外部函数。
标签: python django django-models django-admin