Как подкласс формы.Поле в Django внутри формы и использовать его?

#python #django #forms

#python #django #формы

Вопрос:

У меня есть следующая форма:

 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, как обычно:

super(MyForm.MyField, self).__init__(*args, **kwargs)

Рекомендуется ли определять поля внутри форм? Где еще я должен определить поля, которые используются только в одной форме? Каковы недостатки super(self.__class__, self) в отличие от super(A.B, self) ?

Ответ №1:

Определение класса внутри класса очень редко бывает полезным в Python в целом — это ничего не даст, и внутренний класс не получает никакого специального доступа к внешнему классу, как, скажем, в Java.

Просто поместите определение поля перед классом form и используйте его как обычно.

Кроме того, вы никогда не должны использовать self.__class__ внутри суперзвонка. Это всегда относится к конкретному классу, а не к классу на этом уровне иерархии, поэтому, вероятно, приведет к бесконечному циклу, если ваш класс когда-либо будет подклассирован по очереди.