2011-05-16 24 views
0

我有以下表格:
django mutlipleChoiceField如何驗證?

forms.py:

class enrolForm(forms.Form): 
    CHOICES = [('male','male'),('female','female')] 
    students = forms.MultipleChoiceField(choices = CHOICES) 

views.py:

form = enrolForm(request.POST) 
if form.is_valid(): 
      print "creating student" 
      exam = models.Exam.objects.get(name=examName) 
      . 
      .#more code ....... 

而不會繼續(print "creating student"),形式是永遠有效。這是爲什麼 ? 如何驗證這樣的形式
請幫助

編輯: 它說,在form.errors:<ul class = "errorlist"><li> students<ul class="errorlist"><li>This field is required.</li></ul></li></ul><br> 編輯:

views.py:

def enrol(request,examName): 
    print "EXAm naaame" 
    form = enrolForm() 
    allStudents = models.User.objects.filter(groups__name="students") 
    myList = [] 

    for i in allStudents: 
     myList.append((i,i)) 


    print allStudents,'33333333333333333333' 

    form.fields['students'].choices = myList 


    if request.method == 'POST': 
     form = enrolForm(request.POST) 

     if form.is_valid(): 
      exam = models.Exam.objects.get(name=examName) 
      for i in form.cleaned_data['students']: 

       user= models.User.objects.get(username=i) 
       exam = models.Exam.objects.get(name= examName)     
       models.Exam_Student.objects.create(user,exam) 

      return render_to_response('enrol.html',RequestContext(request,{'form':form})) 

    variables = RequestContext(request,{'form':form}) 
    return render_to_response("enrol.html",variables) 
+0

你在'form.errors'中得到了什麼? – manji 2011-05-16 20:47:19

+0

看起來'request.POST'是空的。在發回頁面之前是否選擇了一個選項(男性或女性)? – manji 2011-05-16 21:14:57

+0

你確定你正在做一個post請求而不是get請求嗎? – 2011-05-16 21:28:03

回答

1

這有什麼錯用一個標準的ChoiceField?

class enrolForm(forms.Form): 
    CHOICES = [('male','male'),('female','female')] 
    students = forms.ChoiceField(choices = CHOICES) 

而且這樣做是爲了查看錯誤,並讓我們知道將是有益的:因爲需要students

if form.is_valid(): 
    print "creating student" 
    exam = models.Exam.objects.get(name=examName) 
    ... 
else: 
    print 'ERRORS:', form.errors 
+0

我想要一個充滿所有學生的大菜單,所以老師會從這個列表中選擇學生並將它們添加到課程中。你認爲標準選擇領域對這項任務有好處嗎? – 2011-05-16 21:08:21

+0

如果你會顯示你的學生和老師模型 – 2011-05-16 21:19:29

+0

,這將是有益的。對不起,我看錯了你的問題。你應該顯示你的學生和班級模型。 – 2011-05-16 21:26:55

1

您的形式是無效的。這意味着您必須選擇一個學生才能使is_valid()爲真。

編輯:對於一些奇怪的原因,我不能在我的意見添加新線,所以我加入這個在這裏...

出於測試目的,去除一切,但要領,看看是什麼發生:

def enrol(request): 
    if request.method == 'POST': 
     form = enrolForm(request.POST) 
     if form.is_valid(): 
      print 'Valid form' 
     else: 
      print form 
    else: 
     form = enrolForm() 

    return render_to_response('enrol.html', {'form' : form}, context_instance=RequestContext(request)) 
+0

我在提交之前選擇了所有列表元素。你是這個意思嗎 ? – 2011-05-16 22:09:01

+0

這不是我的意思。您發佈的錯誤表明沒有正在選擇的選項。你爲什麼不發佈整個views.py函數。這將提供一些清晰。 – 2011-05-16 22:22:59

+0

看到我上面的修改。 – 2011-05-17 21:14:49