Django 如何处理无法验证的表单?

Django 如何处理无法验证的表单?,django,django-forms,Django,Django Forms,因此,我在django应用程序中处理一个表单,问题是,它根本无法验证。当我提交它而不填写字段时,它会重定向,即使它有错误的数据,它也会重定向, 这是我的表格 class CheckoutForm(forms.ModelForm): def __init__(self,*args,**kwargs): super(CheckoutForm, self).__init__(*args, **kwargs) #overide default attributes

因此,我在django应用程序中处理一个表单,问题是,它根本无法验证。当我提交它而不填写字段时,它会重定向,即使它有错误的数据,它也会重定向, 这是我的表格

class CheckoutForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        super(CheckoutForm, self).__init__(*args, **kwargs)
        #overide default attributes
        for field in self.fields:
            self.fields[field].widget.attrs['size'] = '30'
        self.fields['credit_card_type'].widget.attrs['size'] ='1'
        self.fields['credit_card_expire_year'].widget.attrs['size'] = '1'
        self.fields['credit_card_expire_month'].widget.attrs['size'] = '1'
        self.fields['credit_card_cvv'].widget.attrs['size'] = '5'
    class Meta:
        model = Orders
        exclude = ('status','transaction_id',)

    credit_card_number = forms.CharField()
    credit_card_type = forms.CharField(widget=forms.Select(choices=CARD_TYPES))
    credit_card_expire_month = forms.CharField(widget=forms.Select(choices=cc_expire_months()))
    credit_card_expire_year = forms.CharField(widget=forms.Select(choices=cc_expire_years()))
    credit_card_cvv = forms.CharField()
这是应该验证表单的视图

def show_checkout(request):
    if order.is_empty(request):
        cart_url = urlresolvers.reverse('order_index')
        return HttpResponseRedirect(cart_url)
    if request.method == 'POST':
        postdata = request.POST.copy()
        form = forms.CheckoutForm(request.POST,postdata)
        if form.is_valid():
            response = checkout.process(request)
            order_number = response.get('order_number',0)
            error_message = response.get('message','')
            if order_number:            
                request.session['order_number'] = order_number
        if postdata['submit'] == 'place order':
            reciept_url = urlresolvers.reverse('checkout_reciept')
            return HttpResponseRedirect(reciept_url)
        else:
            error_message = u'Correct these errors'
    else:
        form = forms.CheckoutForm()
    context = {
        'form':form,
        'error_message':error_message
    }
    return render_to_response('checkout/checkout.html',context,context_instance=RequestContext(request))
以下是我在模板中所做的工作

{% block content %}
<h1>Checkout</h1>{% if error_message %}
 <ul class="errorlist">
  <li>{{ error_message }}</li>
 </ul>
{% endif %}
<form action="." method = "post">
 <fieldset class="checkout">
  <legend>Contact Info</legend>
  <table>
  {% form_table_row form.email %}
  {% form_table_row form.phone %}
  </table>
 </fieldset>
 <fieldset class="checkout">
  <legend>Delivery Info</legend>
  <table>
  {% form_table_row form.delivery_name%}
  {% form_table_row form.delivery_address %}
  {% form_table_row form.delivery_city %}
  </table>
 </fieldset>
 <fieldset class="checkout">
  <legend>Billing Info</legend>
  <table>
  {% form_table_row form.billing_name %}
  {% form_table_row form.billing_address %}
  {% form_table_row form.billing_city %}
  </table>
 </fieldset>
 <fieldset class="checkout">
  <legend>Credit Card Info</legend>
  <table>
  {% form_table_row form.credit_card_number %}
  {% form_table_row form.credit_card_type %}
  {% form_table_row form.credit_card_expire_month %}
  {% form_table_row form.credit_card_expire_year %}
  {% form_table_row form.credit_card_cvv %}
  </table>
 </fieldset>
 <table>
 <tr>
 <form method="post" action=".">
  {% csrf_token %}
  <th colspan="2">  
   <input name="submit" type="submit" value="place order" class="submit" />
  </th>
 </form> 
 </tr>
 </table>
</form>
{%block content%}
签出{%if错误\消息%}
  • {{error_message}}
{%endif%} 联系方式 {%form\u table\u row form.email%} {%form\u table\u row form.phone%} 荷物追迹番号 {%form\u table\u row form.delivery\u name%} {%form\u table\u row form.delivery\u address%} {%form\u table\u row form.delivery\u city%} 账单信息 {%form\u table\u row form.billing\u name%} {%form\u table\u row form.billing\u address%} {%form\u table\u row form.billing\u city%} 信用卡信息 {%form\u table\u row form.credit\u card\u number%} {%form\u table\u row form.credit\u card\u type%} {%form\u table\u row form.credit\u card\u expire\u month%} {%form\u table\u row form.credit\u card\u expire\u year%} {%form\u table\u row form.credit\u card\u cvv%} {%csrf_令牌%}

现在我知道这似乎很多,但这是因为我不确定问题出在哪里,因为我从未遇到过它,也不清楚我正在查看的几个解释。

“return HttpResponseRedirect(Receipt_url)”将在每次单击提交按钮时运行,不管表单是否有效。你认为我应该怎么做。谢谢,老兄,我修正了…这取决于预期的行为。但是当存在任何类型的post数据时,“is_valid”范围之后的所有内容都将始终运行。将else添加到“is_valid”范围。或者在代码有效后缩进代码。这是缩进问题。非常感谢