form.is_valid() 总是返回 false [英] form.is_valid() always returning false
本文介绍了form.is_valid() 总是返回 false的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Form.is_valid() 总是返回 false,它从不显示任何类型的错误.以下是来自 forms.py、views.py 和 template/transaction_add_page.html
的代码片段表格
class TransactionForm(forms.Form):account = forms.ModelChoiceField(queryset=Account.objects.none())交易 = 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 = self.cleaned_data['account']返回帐户raise forms.ValidationError('请选择一个帐户.')def clean_transactions(self):如果 self.cleaned_data 中的交易":交易 = self.cleaned_data['交易']退货交易raise forms.ValidationError('至少需要一笔交易.')
查看
@login_requireddef transaction_add_page(请求):如果 request.method == 'POST':form = TransactionForm(request.POST)如果 form.is_valid():variables = RequestContext(request, {'account': form.clean_account(), 'transactions': form.clean_transactions()})return render_to_response('transaction_confirm_page.html', 变量)form = TransactionForm(request.user)变量 = RequestContext(request, {'form': form})return render_to_response('transaction_add_page.html', 变量)
模板
{% 扩展 "base.html" %}{% 区块标题 %}添加交易{% endblock %}{% block head %}添加交易{% endblock %}{% 块内容 %}<form method="post" action=".">{{ form.non_field_errors }}{{ form.errors }}{% 用于表单 %} 中的字段<div>{{ field.errors }}{{ field.label_tag }}:{{ field }}
{% 结束为 %}<input type="submit" value="添加交易"/></表单>{% 结束块 %}
解决方案
如果你在初始化器上设置了用户参数,你需要使用它.
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屋!
查看全文