Django 1.9.7UpdateView и CreateView разделяют общие функции JavaScript
Обновление и создание более или менее подобные операции. Иногда я хотел бы добавить события JavaScript в качестве виджета attrs. Например, пользователи выбирают пол. В зависимости от этого я хотел бы показать или скрыть девичье имя. Это всего лишь пример некоторой операции, общей для UpdateView и CreateView.
Я попытался организовать его как микс, но не удалось: UpdateView и CreateView используют FormMixin. Если я организую другой mixin, наследующий FormMixin, я получаю столкновение.
Не могли бы вы помочь мне понять, как справиться без повторения кода?
class PersonUpdateView(UpdateView):
model = Person
fields = ['gender', 'last_name']
class PersonCreate(CreateView):
model = Person
fields = ['gender', 'last_name']
redirect_name = "people"
field_attrs = {'gender': {'onchange':"alert('G')"},
'last_name': {'onclick': "alert('LN')"},
}
def get_form(self, form_class=None):
form = super(PersonCreate, self).get_form(form_class)
for key, value in self.field_attrs.items():
form.fields[key].widget.attrs = value;
return form
solarissmoke, спасибо за ответ. Но я не могу понять эту идею. Вы предлагаете переопределить метод get_form в PersonCreate и в PersonUpdateView? Тогда mixin не знает об этих представлениях. Но взгляды знают о микшине. Специальный код представлен в виде: поля и их атрибуты. Общий код должен быть в mixin. В любом случае, кажется, что вы предлагаете дублирование кода, если я правильно вас понимаю. И это сложнее, чем просто переопределить методы get_form без каких-либо миксинов. Простите, если я не пойму эту идею. – Michael
Извините, похоже, я не понял ваш вопрос. Я не совсем понимаю ваш комментарий или, к сожалению ... – solarissmoke
solarissmoke, пожалуйста, извините, если бы я был неуклюжим в объяснениях. Я справился с проблемой, используя mixin. Не так, как вы предполагали, но он отлично работает. Спасибо за Вашу поддержку. – Michael