Sir*_*ion 7 python django django-models django-admin
我在网上发现了许多关于这个主题的类似帖子,但没有人明确说明哪个是问题.
码
class Item(models.Model):
@classmethod
def get_next_item_number(cls):
return cls.objects.count() + 1
number = models.IntegerField(default=get_next_item_number)
Run Code Online (Sandbox Code Playgroud)
问题
当我访问Django管理面板时,与'number'字段相关的文本字段包含
<classmethod object at 0x7fab049d7c50>
Run Code Online (Sandbox Code Playgroud)
所以我试着改变上面的代码
class Item(models.Model):
@classmethod
def get_next_item_number(cls):
return cls.objects.count() + 1
number = models.IntegerField(default=get_next_item_number())
Run Code Online (Sandbox Code Playgroud)
但是当我运行django服务器时,我得到:
number = models.IntegerField(default=get_next_item_number())
TypeError: 'classmethod' object is not callable
Run Code Online (Sandbox Code Playgroud)
我知道所有这一切都可以通过将get_next_item_number()声明为外部函数来防止,但这个解决方案对我来说并不优雅,因为get_next_item_number()仅指Item类.
我缺少一个解决方案吗?
我找到了这个解决方案:
代码
class Item(models.Model):
@staticmethod
def get_next_item_number():
return Item.objects.count() + 1
number = models.IntegerField(default=get_next_item_number.__func__)
Run Code Online (Sandbox Code Playgroud)
我并不完全意识到可能的后果,但它确实有效。