Класс Media в наборе форм Django
У меня есть форма с именем SpecificDateForm
. Кроме того, у меня есть набор форм с именем SpecificDateFormset
, который создается с помощью inlineformset_factory
от Django. Этот набор форм использует HiddenDeleteInputFormset
, пользовательский набор форм, который, как следует из названия, скрывает флажок delete
.
from django import forms
class SpecificDateForm(forms.ModelForm):
class Meta:
model = SpecificDate
fields = ['date',]
labels = {
'date': 'Datum',
}
widgets = {
'date': DatePickerInput(),
}
help_texts = {
'date': 'fix vordefinierter Termin',
}
class HiddenDeleteInputFormSet(forms.BaseInlineFormSet):
def add_fields(self, form, index):
super().add_fields(form, index)
if 'DELETE' in form.fields:
form.fields['DELETE'].widget = forms.HiddenInput()
SpecificDateFormset = forms.inlineformset_factory(
Directive, SpecificDate,
form=SpecificDateForm,
formset=HiddenDeleteInputFormSet,
extra=1,
can_delete=True,
localized_fields=['date']
)
Недавно я узнал, что с помощью class Media
можно внедрить пользовательский javascript, который загружается вместе с формой. Работает ли это с наборами форм? Я не могу заставить его работать. Я пробовал class Media
в разных местах кода, но мой пользовательский javascript никогда не появляется в теге {{ my_formset.media }}
.
Итак, мой вопрос: где мне определить class Media
? Или это просто невозможно с помощью наборов форм?
Да, вы определенно можете использовать класс Media с наборами форм в Django. Атрибут class Media позволяет вам указать JavaScript и CSS файлы, которые необходимы для ваших форм или наборов форм. Эти файлы затем автоматически включаются при рендеринге формы или набора форм в шаблоне с помощью шаблонных тегов {{ form.media }} или {{ formset.media }}.
Чтобы использовать класс Media в формах SpecificDateForm и HiddenDeleteInputFormSet, вам просто нужно определить его в каждом классе формы или набора форм. Вот как это можно сделать:
from django import forms
class SpecificDateForm(forms.ModelForm):
class Meta:
model = SpecificDate
fields = ['date']
labels = {
'date': 'Datum',
}
widgets = {
'date': DatePickerInput(),
}
help_texts = {
'date': 'fix vordefinierter Termin',
}
class Media:
js = ('path/to/your/custom_script.js',)
class HiddenDeleteInputFormSet(forms.BaseInlineFormSet):
def add_fields(self, form, index):
super().add_fields(form, index)
if 'DELETE' in form.fields:
form.fields['DELETE'].widget = forms.HiddenInput()
class Media:
js = ('path/to/your/custom_script.js',)
SpecificDateFormset = forms.inlineformset_factory(
Directive, SpecificDate,
form=SpecificDateForm,
formset=HiddenDeleteInputFormSet,
extra=1,
can_delete=True,
localized_fields=['date']
)
'path/to/your/custom_script.js' с фактическим путем к вашему файлу JavaScript.
Определив класс Media в каждом классе формы или набора форм, указанный JavaScript-файл будет включен при рендеринге формы или набора форм в вашем шаблоне с помощью {{ my_form.media }} или {{ my_formset.media }} соответственно. Убедитесь, что вы правильно отображаете {{ my_formset.media }} в своем шаблоне, чтобы включить файлы JavaScript, определенные в классе Media.