2012-09-01 5 views
0

현재 django를 사용하여 웹 개발을 시작하고 있습니다. 신청서에 다양한 질문과 선택 사항이있는 양식이 필요합니다. , qchoose 목록을 전달하도록django : choicefield 값이 설정되지 않은 경우 request.POST 키가 비어 있습니다.

models.py에서, 테이블 form.py에서 질문

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

를 저장하도록 생성된다 I 폼 클래스의 __init__ 방법 과부하 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)) 

그 다음에 내가 얻을 수, idlst 질문 ID의 목록을 얻으려면 view.py

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

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

quiz.html 에서 에서 정확한 답. 모든 선택 필드가 채워지면 제대로 작동합니다. 문제는 choicefield 값이 비어 있으면 키를 얻지 못하는 것입니다. 나는 요청 이후 생각합니다 .POST는 사전이며, 값이 비어 있어도 모든 키를 반환한다고 가정합니다.

누구든지 내 코드 또는 누락 된 점이 무엇이든지 도움이 될 수 있습니까? 고맙습니다!

+3

처음에는 요청 값을 확인하고 있는지 확신 할 수 없습니다 .POST QueryDict django가 답장을 보내고 있습니다. 실제 오류가 발생한 코드 행을 표시하지 않습니다. – wlashell

답변

1

POST에서도 양식을 사용하고 is_valid()으로 전화하여 양식 cleaned_data dict에 액세스해야합니다.

+0

'form = QuizForm (qchoose, request.POST)'를 사용하여 양식을 다시 가져 왔지만 빈 값이있을 때 여전히 True를 반환하므로'form.is_valid()'가 올바르게 작동하지 않습니다. 요청에 키가 없기 때문에 생각합니다. 비어있는 값과 관련된 POSS 다음 오류가 발생하지 않았습니다. 키가 반환되지 않는 이유를 모르겠습니다. – jjlights

관련 문제