我有一个Django表单,它有3个必需的图像字段。我发现,当我使用一个示例来创建一个更新表单时,HTML输入字段中没有加载图像,因此当我将表单发送到视图以将其保存到数据库中时,由于图像丢失,我得到了一个无效的表单错误。
我将imageField定义为FileField:
class Meta:
model = Edicion
exclude = ['festival']
widgets = {
'logo': FileInput,
'banner': FileInput,
'poster': FileInput,
'fecha_apertura_inscripciones': DateInput(),
'fecha_cierre_inscripciones': DateInput(),
'fecha_inicio': DateInput(),
'fecha_final': DateInput(),
'fecha_notificacion': DateInput(),
}
如果我再次定义这些字段,那么它可以正常工作,但我不能从视图发送此字段。
非常感谢
编辑:表单代码:
Form.py
class createNewEdicion(forms.ModelForm):
required_css_class = 'required-field'
class Meta:
model = Edicion
exclude = ['festival']
widgets = {
'logo': FileInput,
'banner': FileInput,
'poster': FileInput,
'fecha_apertura_inscripciones': DateInput(),
'fecha_cierre_inscripciones': DateInput(),
'fecha_inicio': DateInput(),
'fecha_final': DateInput(),
'fecha_notificacion': DateInput(),
}
help_texts = {
'Nombre': ('Some useful help text.'),
}
error_messages = {
'Nombre': {
'max_length': ("This writer's name is too long."),
},
}
View.py
if request.method == 'POST':
form_festival = createNewFestival(request.POST, request.FILES)
form_edicion = createNewEdicion(request.POST, request.FILES)
# check whether it's valid:
if form_festival.is_valid() and form_edicion.is_valid():
festival.nombre_contacto = form_festival.cleaned_data['nombre_contacto']
festival.save()
festival.edicion.banner = form_edicion.cleaned_data['banner']
festival.edicion.logo = form_edicion.cleaned_data['logo']
festival.edicion.poster = form_edicion.cleaned_data['poster']
festival.edicion.save()
如何创建表单:
form_festival = createNewFestival(instance=festival)
form_edicion = createNewEdicion(instance=edicio)
模板
<div class="tab">
<h2>Información de la edición</h2>
<div class="grid-form-2">
<div class="fieldWrapper">
{{ form_edicion.nombre.errors }}
{{ form_edicion.nombre.label_tag }}
{{ form_edicion.nombre }}
</div>
<div class="fieldWrapper">
{{ form_edicion.banner.errors }}
{{ form_edicion.banner.label_tag }}
{{ form_edicion.banner }}
</div>
<div class="fieldWrapper">
{{ form_edicion.poster.errors }}
{{ form_edicion.poster.label_tag }}
{{ form_edicion.poster }}
</div>
<div class="fieldWrapper">
{{ form_edicion.logo.errors }}
{{ form_edicion.logo.label_tag }}
{{ form_edicion.logo }}
</div>
这不是所有的代码,因为它是一个很长的类。
1条答案
按热度按时间p4tfgftt1#
编辑时也应该将示例传递给表单,因此:
Form
或ModelForm
通常以…Form
后缀结尾,以避免与模型名称冲突,并明确我们正在使用 * 表单 *。因此,最好使用FestivalForm
而不是createNewFestival
。