在 formsets.py 中,您可以找到此代码片段
class BaseFormSet(StrAndUnicode):
"""
A collection of instances of the same Form class.
"""
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList):
...
self.prefix = prefix or self.get_default_prefix() # Note the self.get_default_prefix
...
...
@classmethod # Note the @classmethod
def get_default_prefix(cls):
return 'form'
为什么 get_default_prefix 以这种方式声明,然后用 self. 调用?这样做有什么收获吗? get_default_prefix
在 BaseInlineFormSet (forms/models.py) 中有另一个定义
class BaseInlineFormSet(BaseModelFormSet):
...
@classmethod
def get_default_prefix(cls):
from django.db.models.fields.related import RelatedObject
return RelatedObject(cls.fk.rel.to, cls.model, cls.fk).get_accessor_name().replace('+','')
和另一个BaseGenericInlineFormset
再次使用@classmethod,所以它似乎不是一个错字。我只是不明白为什么会这样做,然后用self调用。
我看到的唯一线索(我不明白)是管理员似乎用FormSet.get_default_prefix()
我想知道是否有一些我对 python 不了解的地方。