私は現在、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 は辞書なので、値が空であってもすべてのキーを返すはずだと思います。
私のコードの何が問題なのか、または何かが欠けているのか、誰か助けてもらえますか? ありがとうございました!