Django 表单不接受 request.POST 值

问题描述 投票:0回答:1

我的项目有问题。当我单击表单的提交按钮时,我可以在 request.POST (调试模式)中看到正确的数据,但函数“form.is_valid”返回错误。事实上,如果我跳过函数 e 仅写入 form.save ,它将引发“NOT NULL 约束失败:fatture_viaggio.distanza_km”。

这是我的代码:

def clienti(request):
    clienti_list = Cliente.objects.all().order_by('nome').exclude(nome='Inalca')
    viaggi_list = Viaggio.objects.all().order_by('-data_viaggio')

    if request.method == 'POST':
        if 'Aggiungi_Cliente' in request.POST:
            formC = ClienteForm(request.POST)
            if formC.is_valid():
                nuovo_cliente = formC.save()
            return redirect('clienti')
        formV = ViaggioForm(request.POST)
        #if formV.is_valid():
        nuovo_viaggio = formV.save()
        return redirect('clienti')
    else:
        formC = ClienteForm()
        formV = ViaggioForm()
        return render(request, 'fatture/clienti.html', {'formC': formC, 'formV': formV, 'clienti': clienti_list, 'viaggi': viaggi_list})

FormC 工作正常,只有 formV 有这个问题。

编辑

正如 Erny 的评论所建议的,这里是模板中的表单:

<div id="viaggio{{ cliente.id }}" style="display: none; width: 100%; background-color: #f1f1f1; padding: 10px; border: 1px solid #d4d4d4;">
    <form id="viaggio-form" method="post">
        {% csrf_token %}
        <label>Data viaggio</label>
        {{ formV.data_viaggio }}
        <label>Ddt:</label>
        {{ formV.ddt }}
        <label>Prezzo viaggio:</label>
        {{ formV.prezzo_viaggio }}
        <label>Distanza km:</label>
        {{ formV.distanza_km }}
        <label>Mittente:</label>
        {{ formV.mittente }}
        <script>
            $("#id_mittente").attr("id", "mittente{{ cliente.id }}");
            $("#mittente{{ cliente.id }}").addClass("mittente{{ cliente.id }}")
        </script>
        <p></p>
        <div style="display: none">
            {{ formV.cliente }}
            <script>
                $("#id_cliente").attr("id", "cliente{{ cliente.id }}");
                $('#cliente{{ cliente.id }} option').filter(function(i, e) { return $(e).text() == "{{cliente.nome}}"}).prop('selected', true)
            </script>
        </div>
        <button type="submit" name="Aggiungi_Viaggio">Aggiungi Viaggio</button>
   </form>
   <button id="chiudi-form-{{ cliente.id }}">Chiudi</button>
</div>

以及形式:

class ViaggioForm(forms.ModelForm):

    class Meta:
        model = Viaggio
        fields = ['data_viaggio','distanza_km','ddt','prezzo_viaggio','cliente','mittente']

    def __init__(self, *args, **kwargs):
        super().__init__()
        numero = kwargs.pop('numero', None)
        if numero == 1:
            self.fields['cliente'].initial = Cliente.objects.get(nome='Inalca')
            self.fields['cliente'].widget.attrs['readonly'] = True
            self.fields['cliente'].required = False
        else:
            self.fields['cliente'].queryset = Cliente.objects.all().exclude(nome='Inalca')

编辑2

我已经改变了这样的形式,现在它可以工作了(我删除了构造函数):

class ViaggioForm(forms.ModelForm):

    class Meta:
        model = Viaggio
        fields = ['data_viaggio','distanza_km','ddt','prezzo_viaggio','cliente','mittente']

为什么构造函数有问题?

django django-forms
1个回答
0
投票

构造函数中的 super 函数是错误的。我改成了正确的形式:

super(ViaggioForm, self).__init__(*args, **kwargs)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.