Нет никаких "удобных методов", если Вы не кодируете их сами, но необходимо было бы все еще реализовать методы делегата в любом пользовательском коде, который Вы используете для создания вещей "удобными".
шаблон делегата там по причине, и поскольку делегаты являются большой частью Objective C, я рекомендую стать довольными ими.
Технически, виджет не обязательно должен иметь прямую связь с полем , поэтому не делайте этого.
Посмотрев на источник CharField
, вы увидите, что он имеет метод widget_attrs
, который автоматически добавляет Атрибут maxlength
для полей TextInput
/ PasswordInput
.
Я предлагаю вам использовать настраиваемое поле, которое переопределяет этот метод и добавляет атрибут для вашего настраиваемого виджета.
Также , Я не уверен, что оставить его в attrs
в любом случае является хорошей идеей -
будет отображаться с недопустимым аргументом max_length
.Может, лучше выключить pop ()
?
Хотя не требуется для решения вашей проблемы, доступ к виду или поле формы может быть действительно полезным иногда. Смотрите полный ответ на другой вопрос , но короче говоря, вы можете связать форму или поле к виджету вручную в форме __ init __
:
class MyForm(forms.ModelForm):
foo = forms.ModelChoiceField(Foo.objects, widget=CustomWidget())
class Meta:
model = Bar
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['foo'].widget.form_instance = self