0

私は現在、djangoを使用してWeb開発を始めています。私のアプリケーションでは、さまざまな数の質問とその選択肢を提示するフォームが必要です。

models.pyでは、質問を格納するためのテーブルが作成されます

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

form.pyでは、 Form クラスの __init__ メソッドをオーバーロードして、フォーム フィールドを作成する QuizItems インスタンスのリストである qchoose を渡します。

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 %}

正解を取得できる質問IDのリストであるidlstを取得したいです。すべての選択フィールドが入力されている場合、正常に機能します。問題は、選択フィールドの値が空の場合、そのキーを取得できないことです。request.POST は辞書なので、値が空であってもすべてのキーを返すはずだと思います。

私のコードの何が問題なのか、または何かが欠けているのか、誰か助けてもらえますか? ありがとうございました!

4

1 に答える 1

1

POSTでもフォームを使用してから、フォームの辞書を呼び出しis_valid()てアクセスすることになっていますcleaned_data

于 2012-09-01T07:24:05.273 に答える