2013-02-17 94 views
0

自定義窗體所以這是我的表格:Django的get_FOO_display不工作

class QuestionForm(forms.ModelForm): 
    answer = forms.ChoiceField(required=True, widget=forms.RadioSelect()) 

    def __init__(self, question=None, *args, **kwargs): 
     super(QuestionForm, self).__init__(*args, **kwargs) 
     self.fields['answer'].choices = [(a.answer, a.answer) for a in Answer.objects.filter(question=question)] 

    class Meta: 
     model = Questions 
     fields = ('answer', 'importance') 

當用戶選擇一個answer它顯示了所有Answer對象。這裏是我的看法:

def questions(request): 
    new_forms = [] 
    q = Questions.objects.all()[0] 
    if request.method =='POST': 
     #form = QuestionForm(request.POST or None) 
     for forms in new_forms: 
      if forms.is_valid(): 
       new = forms.save(commit=False) 
       #get the user's inputs to the QuestionForm and save them 
       UserAnswer(user=request.user, answer=new.cleaned_data['answer'], question=new.question) 
       UserAnswer.save() 

    else: 
     instance=Questions.objects.all().filter(owner=request.user)[0] 
     #form = QuestionForm(question=q, instance=q) 

    for a in Questions.objects.all(): 
     new_forms.append(QuestionForm(question=a, instance=a)) 
    return render_to_response("questions/base.html", locals(), context_instance=RequestContext(request)) 

回答

1

我很困惑你在做什麼。

  print new.fields['id_answer_2'].value 
      print get_id_answer_2_display() 

save(commit=False)一個的ModelForm返回一個模型實例。它甚至不應該有一個fields屬性(你會在這裏得到一個AttributeError)。

2:你接下來撥打電話get_id_answer_2_display(),這似乎不是正確的領域(不必介意你稱之爲獨立功能)。

你的ModelForm意味着你有一個answer領域,從而使用get_FOO_display,你需要調用new.get_answer_display()

+0

讓我澄清我在做什麼。我有一個「問題」模型,它有相關的答案。用戶應該能夠選擇他們對每個問題的答案。這些答案將像'UserAnswer(user = request.user,question = question,answer = answer)'一樣保存到'UserAnswers'中。我可以讓窗體正確顯示上面所做的(我無法弄清楚如何使用Formset做到這一點),但我無法正確保存UserAnswer。我已經更新了我的答案,以匹配我想要做的更好的事情。 – jmitchel3 2013-02-18 01:07:41

+0

問題是什麼?如果有錯誤,您必須發佈它們。根據我所看到的,你當前的代碼應該會拋出錯誤。 new.cleaned_data不應該工作/存在。保存ModelForm將返回實例,而不是表單。 – 2013-02-18 02:25:01