我有点卡住了。有人可以告诉我为什么is_valid()
函数返回false并且在屏幕上也没有显示错误?我尽可能简化了我的视图,无论我使用何种数据填充表单,HttpResponseRedirect
总是重定向到/information
。为什么我的Django form is_valid()返回false?
forms.py
class FantasySeasonForm(ModelForm):
class Meta:
model = FantasyTeam
def __init__(self,*args,**kwargs):
super(FantasySeasonForm,self).__init__(**kwargs)
#filter all players to only premier league players
self.fields['player1'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player2'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player3'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player4'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player5'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player6'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player7'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player8'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player9'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player10'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player11'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player12'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player13'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player14'].queryset = Player.objects.filter(team__competition__pk=2)
self.fields['player15'].queryset = Player.objects.filter(team__competition__pk=2)
views.py
@login_required
def entry(request):
fantasyTeamForm = FantasySeasonForm() #Form to store each player in the fantasy team
seasonUserTournForm = PartialSeasonEntryForm()
# If the form has been submitted...
if request.method == 'POST':
fantasyTeamForm = FantasySeasonForm(request.POST or None) # A form bound to the POST data
if fantasyTeamForm.is_valid():
return HttpResponseRedirect('/season/entrysuccess') #page on success
else:
return HttpResponseRedirect('/information') #page on error
#OTHERWISE A GET REQUEST
args = {}
args.update(csrf(request))
args['form'] = fantasyTeamForm
args['form2'] = seasonUserTournForm
return render_to_response('entry.html', args, context_instance=RequestContext(request))
entry.html
<h2><b>Choose your team:</b></h2><br>
{% for field in form %}
{{field.error}}
{% endfor %}
{% for field in form2 %}
{{field.error}}
{% endfor %}
<form action="/season/entry/" method="post"> {% csrf_token %}
{{form2}}
<br><br>
{{form.as_ul}}
<br>
<input type="submit" value="Submit Team" />
</form>
更新
为球队名称和球员选择1-7值后,留下其余的空白我已经印在了else语句下面的值..
form.is_bound
回报True
form.errors
回报
<ul class="errorlist"><li>player9<ul class="errorlist"><li>This field is required.</li></ul></li><li>player4<ul class="errorlist"><li>This field is required.</li></ul></li><li>player8<ul class="errorlist"><li>This field is required.</li></ul></li><li>player11<ul class="errorlist"><li>This field is required.</li></ul></li><li>player10<ul class="errorlist"><li>This field is required.</li></ul></li><li>player5<ul class="errorlist"><li>This field is required.</li></ul></li><li>player14<ul class="errorlist"><li>This field is required.</li></ul></li><li>player6<ul class="errorlist"><li>This field is required.</li></ul></li><li>player13<ul class="errorlist"><li>This field is required.</li></ul></li><li>player3<ul class="errorlist"><li>This field is required.</li></ul></li><li>player12<ul class="errorlist"><li>This field is required.</li></ul></li><li>player15<ul class="errorlist"><li>This field is required.</li></ul></li><li>player7<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
form.data
回报
<QueryDict: {'player14': [''], 'player9': [''], 'player4': ['3897'], 'team_name': ['Just Amazing'], 'player8': [''], 'player11': [''], 'player10': [''], 'player5': ['3897'], 'player1': ['1934'], 'player12': [''], 'player6': ['13017'], 'player13': [''], 'player2': ['1934'], 'player3': ['3897'], 'csrfmiddlewaretoken': ['H8dIdnepxSgEduPCT6Yiy9iYsLmXqwJy'], 'player15': [''], 'player7': ['13017']}>
如果没有重定向从else子句在视图而去,形式本身会告诉你它的错误。 – 2014-09-22 17:30:54
当它没有else子句时,没有显示错误,页面只是刷新! – Matchday 2014-09-22 17:31:45
只需在return语句之前的'else'子句中打印form.errors'。你会知道错误是什么。或者,现在只是注释掉其他整个块 - 你会看到确切的错误是什么 – karthikr 2014-09-22 17:52:40