2013-03-13 63 views
1

在formsets.py,你会发现这个代码片断为什么get_default_prefix @classmethod,而不是只是一个普通的方法

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这样声明,然后用自己叫?这样做有什么收获吗? get_default_prefix具有再次使用@classmethod在BaseInlineFormSet另一个定义(形式/ 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,所以它不会出现是一个错字。我只是不明白为什么会这样做,然后自我调用。

我看到(我不知道),唯一的线索是,管理员似乎与FormSet.get_default_prefix()

调用它,我想知道,如果有什么我只是不理解有关Python。

回答

1

从代码中看到,从实例调用类方法是完全合法的。一个相关的stackoverflow post表示从实例调用没有任何好处,(这是不好的做法);因为如果你只是从实例调用你的方法应该不是classmethod

虽然我认为你回答自己的问题。如果django从某个地方调用FormSet.get_default_prefix(),那么他们可能不想实例化一个formset对象。

+0

是的,我读了几个看起来合法的地方(虽然没有找到一个关于没有好处的地方)。 – boatcoder 2013-03-13 18:57:36

相关问题