为什么Django退货单无效?

为什么Django退货单无效?,django,django-forms,django-templates,django-views,Django,Django Forms,Django Templates,Django Views,我有一个函数的问题,当我使用标签{form.image\u cliente}时,总是返回一个“form is invalid”并且不保存任何内容,但是如果我使用标签{form.as\u p}返回一个form is valid并保存字段image\u cliente,我不知道为什么,我只想在模板中显示form.image\u cliente Mys表格客户: class ClienteForm(forms.ModelForm): id_tipo_cliente = forms.ModelChoi

我有一个函数的问题,当我使用标签{form.image\u cliente}时,总是返回一个“form is invalid”并且不保存任何内容,但是如果我使用标签{form.as\u p}返回一个form is valid并保存字段image\u cliente,我不知道为什么,我只想在模板中显示form.image\u cliente

Mys表格客户:

class ClienteForm(forms.ModelForm):

id_tipo_cliente = forms.ModelChoiceField(queryset=Tipo_cliente.objects.filter(status=1), label="Tipo de cliente" ,empty_label="Seleciona tipo", widget=forms.Select(attrs={'value':'form-control'}))

password = forms.CharField(label="Password", required=False,
                        widget=forms.PasswordInput)

class Meta:

    model = Cliente
    exclude = ['status', 'id_usuario_alt', 'fecha_creacion', 'fecha_modificacion', 'fecha_cancelacion']
    fields = [

    'nombres',
    'apellidos',
    'usuario',
    'password',
    'correo_electronico',
    'direccion',
    'telefono',
    'telefono_celular',
    'id_tipo_cliente',
    'image_cliente',
    ]

    labels = {'nombres':'Nombres', 'apellidos':'Apellidos', 'usuario':'Usuario', 'correo_electronico':'Correo', 'direccion':'Direccion', 'telefono':'Telefono', 'telefono_celular':'Celular', }
    widgets = {

    'nombres': forms.TextInput(attrs={'class':'form-control'}),
    'apellidos': forms.TextInput(attrs={'class':'form-control'}),
    'usuario': forms.TextInput(attrs={'class':'form-control'}),
    'correo_electronico': forms.TextInput(attrs={'class':'form-control'}),
    'direccion': forms.TextInput(attrs={'class':'form-control'}),
    'telefono': forms.TextInput(attrs={'class':'form-control'}),
    'telefono_celular': forms.TextInput(attrs={'class':'form-control'}),
    'image_cliente':forms.ClearableFileInput(attrs={'multiple': True, 'class':'file', 'data-show-upload':'false', 'data-show-preview':'false'})

    }
这是我视图中的我的def函数:

def subirIMGCliente(request, pk):

clientes = get_object_or_404(Cliente, pk=pk)


if request.method == 'POST':
    form = ClienteForm(request.POST, request.FILES, instance=clientes)

    if form.is_valid():
        clientes = form.save(commit=False)
        if clientes.password == '':
            clientes.save(update_fields=['image_cliente'])
            print('yes');

        return redirect('BackEnd:cliente')
    else:
        print('form in not valid');

else:

    form = ClienteForm(instance=clientes)

return render(request, 'back/Modulo_cliente/imagenes_cliente.html', {'form': form })
我的模板

    <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="form-group">  

               {{form.image_cliente}}
            </div>
        </div>
       </div>
        </br>

        <br>    <div class="row">
         <div class="col-md-8 col-md-offset-2">
     <button class="btn btn-success" type="submit">Guardar</button>

      <a href = "{% url 'BackEnd:cliente' %}" class = "btn btn-primary ">        <span>Regresar</span></a>


    </div>
    </div>
   </div>
   </form>

{%csrf_令牌%}
{{form.image_cliente}}


瓜达尔
需要以下字段:

  • 乌萨里奥
  • 化名
  • 指令
  • 阿佩利多斯
  • id_tipo_客户
  • 科雷奥乌尔电子公司
  • 电传
  • telefono_celular
在它们上添加一个required=False,就像您在密码字段中所做的那样,您就可以上路了

您为该对象添加了一个实例,并且该对象具有所有必需表单字段的值,因此,当您加载form.as\p或输出整个表单的任何其他标记时,它将加载所有必需字段。这样,在提交表单时,就不会出现验证错误。有效性检查是在request.POST上完成的,而不是在原始模型实例上完成的,因此当提交表单时没有某些必填字段,您会收到验证错误

要调试这类问题,请在模板中的某个位置添加{form.errors}。这就是我在你的表格中发现错误的原因

最佳做法是在表单顶部的列表中显示所有与字段无关的错误,并在每个表单字段旁边显示与字段相关的错误。 因此,您需要在模板顶部添加如下内容:

<ol>
  {% for error in form.non_field_errors %}
    <li><strong>{{ error|escape }}</strong></li>
  {% endfor %}
</ol>

{%表示表单中的错误。非\u字段\u错误%}
  • {{error | escape}}
  • {%endfor%}
    对于image_cliente表单字段,类似这样的内容:

    {% if form.image_cliente.errors %}
      <ol>
        {% for error in form.image_cliente.errors %}
          <li><strong>{{ error|escape }}</strong></li>
        {% endfor %}
      </ol>
    {% endif %}
    
    {%if form.image\u cliente.errors%}
    {form.image_cliente.errors%}中的错误为%
    
  • {{error | escape}}
  • {%endfor%} {%endif%}
    请提供客户形式的定义。还要检查这两种情况下的html输出。它应该可以帮助您理解问题所在。我编辑了postWhat errors show what errors what printing
    form.errors
    After
    print('form in not valid')
    ?在8个字段中打印这个:必填字段,但我不明白为什么,因为我引用了对象,如果我使用标记{form.as{p},我不明白为什么