django Image字段没有在编辑表单上加载当前值,用户必须再次上传文件

webghufk  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(153)

我有一个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>

这不是所有的代码,因为它是一个很长的类。

p4tfgftt

p4tfgftt1#

编辑时也应该将示例传递给表单,因此:

if request.method == 'POST':
    form_festival = createNewFestival(
        request.POST, request.FILES, instance=festival
    )
    form_edicion = createNewEdicion(request.POST, request.FILES, instance=edicio)
    # check whether it's valid:
    if form_festival.is_valid() and form_edicion.is_valid():
        form_festival.save()
        form_edicion.save()
        return redirect('name-of-some-view')
else:
    form_festival = createNewFestival(instance=festival)
    form_edicion = createNewEdicion(instance=edicio)
    • 注意**:FormModelForm通常以…Form后缀结尾,以避免与模型名称冲突,并明确我们正在使用 * 表单 *。因此,最好使用FestivalForm而不是createNewFestival

相关问题