我有以下表格:
class MyForm(forms.Form):
class MyField(forms.CharField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('max_length', 320)
super(self.__class__, self).__init__(*args, **kwargs)
sms_eng = MyField(label=_('Text for SMS'))
困扰我的是我不能像往常那样打电话给超级:
super(MyForm.MyField, self).__init__(*args, **kwargs)
是否建议在表单中定义字段?我还应该在哪里定义仅在一种形式中使用的字段? super(self.__class__, self)
与super(A.B, self)
相比有什么缺点?
答案 0 :(得分:2)
在Python中定义一个类在Python中很少有用 - 这样做没有任何好处,并且内部类没有像Java那样获得对外部类的任何特殊访问。
只需将字段定义放在表单类之前并正常使用它。
此外,您必须永远在超级通话中使用self.__class__
。这总是指具体类,而不是层次结构中该级别的类,因此如果您的类依次被子类化,则很可能导致无限循环。