Переопределить атрибуты по умолчанию формы Django

В моем приложении Django у меня есть несколько разных форм, похожих по стилю. Чтобы не повторяться снова и снова, я пытаюсь переписать настройки формы по умолчанию.

В начале я хотел установить некоторые настройки по умолчанию для каждой формы, которую я использую в своем приложении, и попытался подклассифицировать django.forms.Form :

  • Facebook, Django и Google App Engine
  • GeoDjango дистанционный фильтр с дистанционным значением, хранящимся в модели - запрос
  • Django 1.9 ImportError для import_module
  • Служить динамически сгенерированное изображение с Django
  • Как заставить Django работать с MySQL в XAMPP?
  • Добавить класс в Django label_tag ()
  • class DefaultForm(forms.Form): error_css_class = 'alert' error_class = DivErrorList required_css_class = 'required' label_suffix = ':' auto_id = True class TechnicalSurveyForm(DefaultForm): location = forms.CharField(label='GPS Location') satellite = forms.ModelChoiceField(queryset=get_satellites(), empty_label=None) modem_sn = forms.CharField() 

    В my views.py я бы назвал форму просто с помощью

     tsurvey = TechnicalSurveyForm() 

    К сожалению, настройки, установленные в DefaultForm , не установлены (когда я использую TechnicalSurvey(auto_id = True, error_class = DivErrorList) они есть). Итак, я предполагаю, что мой подход совершенно не прав. Может кто-нибудь, пожалуйста, помогите мне?

  • Django: Неправильноконфигурировано: параметр SECRET_KEY не должен быть пустым
  • Как вы можете работать с PyPy, Django и PostgreSQL?
  • Администратор Django: упорядочивается по соответствующему внешнему ключу
  • Почему память не выделяется в систему после больших запросов (или серии запросов) в django?
  • Переключение Django, для блока кода, переключает язык, поэтому переводы выполняются на одном языке
  • Запустить / отладить приложение UnitTests приложения Django из контекстного меню правой кнопки мыши в PyCharm Community Edition?
  • One Solution collect form web for “Переопределить атрибуты по умолчанию формы Django”

    Я предполагаю, что __init__ forms.Form инициализирует атрибуты формы. Вам необходимо переопределить метод __init__ и изменить атрибуты после того, как Django выполнил свои действия.

    EDIT: Действительно, после проверки исходного кода django вы можете увидеть, что атрибуты объекта формы инициализируются в функции __init__ . Метод показан на github django .

     class DefaultForm(forms.Form): def __init__(self, *args, **kwargs): super(forms.Form, self ).__init__(*args, **kwargs) self.error_css_class = 'alert' self.error_class = DivErrorList self.required_css_class = 'required' self.label_suffix = ':' self.auto_id = True 

    Для начинающих Python

    Это совершенно нормально. Все атрибуты с таким же именем, объявленные в объявлении класса (как в примере автора), будут переопределяться, если они также определены в функции init. Существует несколько различий между этими двумя типами объявлений атрибутов.

    Python - лучший язык программирования в мире.