2012-09-01 64 views
0

我目前正在使用django開始web開發。在我的申請中,我想要一個包含各種問題及其選擇的表單。django:request.POST鍵是空的,如果沒有設置選擇域值

models.py,一個表創建存儲問題

class QuizItems(models.Model): 
    question = models.CharField(max_length=255) 
    choices = SeparatedValuesField(token="$") 
    answer = models.IntegerField() 

form.py,我在過載Form類的__init__方法,以qchoose通過,名單QuizItems實例來創建表單域。

def choiceItem(question): 
    return [(unicode(idx), q) for idx, q in enumerate(question.choices)] 

class QuizForm(forms.Form): 
    def __init__(self, qchoose, *args, **kwargs): 
     super(QuizForm, self).__init__(*args, **kwargs) 
     for q in qchoose: 
      self.fields[str(q.id)] = forms.ChoiceField(required=True, 
       label=q.question, widget=forms.RadioSelect(),choices=choiceItem(q)) 

然後在view.py

if request.method == 'POST': 
    idlst = request.POST.keys() 
else: 
    # qchoose is a list of quizitems 
    form = QuizForm(qchoose) 

quiz.html

{% for field in form %} 
<li><b> {{ field.label }} </b></li>                              
<ul> {{ field }} </ul> 
{% endfor %} 

我想idlst,問題編號清單,我可以得到來自正確的答案。當所有的選擇域都被填充時,它工作正常。問題是如果有任何選擇字段的值是空的,我不會得到它的關鍵。我想因爲request.POST是一個字典,它應該返回所有的鍵,即使它的值是空的。

任何人都可以幫助我什麼是我的代碼錯了或缺少什麼?謝謝!

+3

最初我不確定您是否正在檢查request.POST QueryDict django的值是否回傳給您。您沒有向我們展示發生實際錯誤的代碼行。 – wlashell

回答

1

您應該使用POST的表單,然後撥打is_valid()並訪問表格的cleaned_data字典。

+0

我使用'form = QuizForm(qchoose,request.POST)'來獲取表單,但是'form.is_valid()'無法正常工作,因爲它仍然在空值時返回True。 我認爲這是因爲request.POST沒有與空值相關聯的鍵,所以沒有提出錯誤。 我不知道爲什麼鍵沒有返回。 – jjlights

相關問題