如何在表单中的Django中子类化一个form.Field并使用它?

时间:2014-06-20 07:35:14

标签: python django forms

我有以下表格:

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)相比有什么缺点?

1 个答案:

答案 0 :(得分:2)

在Python中定义一个类在Python中很少有用 - 这样做没有任何好处,并且内部类没有像Java那样获得对外部类的任何特殊访问。

只需将字段定义放在表单类之前并正常使用它。

此外,您必须永远在超级通话中使用self.__class__。这总是指具体类,而不是层次结构中该级别的类,因此如果您的类依次被子类化,则很可能导致无限循环。