form.is_valid()总是返回false [英] form.is_valid() always returning false

查看:348
本文介绍了form.is_valid()总是返回false的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Form.is_valid()始终返回false,它不会显示任何种类的错误。以下是来自forms.py,views.py和template / transaction_add_page.html的代码片段

表单

 类TransactionForm(forms.Form):
account = forms.ModelChoiceField(queryset = Account.objects.none())
transactions = forms.CharField(widget = forms.Textarea(attrs = {'rows':'10','cols':'70'}))

def __init __(self,user,* args,* * kwargs)
super(TransactionForm,self).__ init __(* args,** kwargs)
self.fields ['account']。queryset = Account.objects.filter(user = user)

def clean_account(self):
如果self.cleaned_data中的account:
account = self.cleaned_data ['account']
return account
提交form.ValidationError('请选择一个帐户')

def clean_transactions(self):
如果self.cleaned_data中的事务:
transactions = self.cleaned_data [ 'transactions']
return transa ctions
raise forms.ValidationError('至少需要一个事务')

查看

  @login_required 
def transaction_add_page(request):
如果请求.method =='POST':
form = TransactionForm(request.POST)
如果form.is_valid():
variables = RequestContext(request,{'account':form.clean_account ),'transaction':form.clean_transactions()})
返回render_to_response('transaction_confirm_page.html',变量)

form = TransactionForm(request.user)
variables = RequestContext(request,{'form':form})
返回render_to_response('transaction_add_page.html',变量)

模板

  {%extendsbase.html%} 
{%block title%}添加交易{%endblock%}
{%block head%}添加交易{%endblock%}
{%block content%}
& lt; form method =postaction =。 >
{{form.non_field_errors}}
{{form.errors}}

{%表单中的字段%}
< div>
{{field.errors}}
{{field.label_tag}}:{{field}}
< / div>
{%endfor%}

< input type =submitvalue =添加事务/>
< / form>
{%endblock%}


解决方案

在初始化器上设置用户参数,您需要使用它。

  if request.method =='POST':
form = TransactionForm(user = request.user,data = request.POST)


Form.is_valid() is always returning false, and it never shows any kind of error. Following is the code snippet from forms.py, views.py and template/transaction_add_page.html

Form

class TransactionForm(forms.Form):
  account = forms.ModelChoiceField(queryset=Account.objects.none())
  transactions = forms.CharField(widget=forms.Textarea(attrs={'rows':'10', 'cols':'70'}))

  def __init__(self, user, *args, **kwargs):
    super(TransactionForm, self).__init__(*args, **kwargs)
    self.fields['account'].queryset = Account.objects.filter(user=user)

  def clean_account(self):
    if 'account' in self.cleaned_data:
      account = self.cleaned_data['account']
      return account
    raise forms.ValidationError('Please select an account.')

  def clean_transactions(self):
    if 'transactions' in self.cleaned_data:
      transactions = self.cleaned_data['transactions']
      return transactions
    raise forms.ValidationError('At-least one transaction is required.')

View

@login_required
def transaction_add_page(request):
  if request.method == 'POST':
    form = TransactionForm(request.POST)
    if form.is_valid():
      variables = RequestContext(request, {'account': form.clean_account(), 'transactions': form.clean_transactions()})
      return render_to_response('transaction_confirm_page.html', variables)

  form = TransactionForm(request.user)
  variables = RequestContext(request, {'form': form})
  return render_to_response('transaction_add_page.html', variables)

Template

{% extends "base.html" %}
{% block title %}Add Transactions{% endblock %}
{% block head %}Add Transactions{% endblock %}
{% block content %}
<form method="post" action="." >
  {{ form.non_field_errors }}
  {{ form.errors }}

  {% for field in form %}
    <div>
      {{ field.errors }}
      {{ field.label_tag }}: {{ field }}
    </div>
  {% endfor %}

  <input type="submit" value="Add Transactions" />
</form>
{% endblock %}

解决方案

if you set on the initializer the user argument, you need to use it.

if request.method == 'POST':
   form = TransactionForm(user=request.user, data=request.POST)

这篇关于form.is_valid()总是返回false的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆