我有一个名为
SpecificDateForm
的表格。此外,我有一个名为 SpecificDateFormset
的表单集,它是使用 Django 的 inlineformset_factory
创建的。此表单集使用 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
?或者对于表单集来说根本不可能?
是的,您绝对可以在 Django 中将 Media 类与表单集一起使用。 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 类,当您分别使用 {{ my_form.media }} 或 {{ my_formset.media }} 在模板中渲染表单或表单集时,将包含指定的 JavaScript 文件。确保您在模板中正确渲染 {{ my_formset.media }} 以包含 Media 类中定义的 JavaScript 文件。