2015-06-06 73 views
0

我想制作单独提交这2个模型的表单。不知何故,我设法得到他们的意见。但是,我得到错误说:Django窗体为2相关模型

不受约束的方法full_clean()必须与MCQuestions实例作为第一个参数来调用(什么都没有代替)

我的细节是:

models.py

class MCQuestions(models.Model): 
    question = FroalaField(null=True, blank=True) 
    qcategory = models.ForeignKey(Categories, related_name="MCCategory", blank=True) 


class MCAnswers(models.Model): 
    questionid = models.ForeignKey(MCQuestions, related_name="mc_answer") 
    a = models.CharField(max_length=50, null=True, blank=True) 
    z_a = models.BooleanField(default=False) 
    b = models.CharField(max_length=50, null=True, blank=True) 
    z_b = models.BooleanField(default=False) 
    c = models.CharField(max_length=50, null=True, blank=True) 
    z_c = models.BooleanField(default=False) 
    d = models.CharField(max_length=50, null=True, blank=True) 
    z_d = models.BooleanField(default=False) 

views.py

def AddMCQuestions(request, course_id): 
    if request.method == 'POST': 
     aform = MCQuestionsForm(request.POST) 
     bform = MCAnswersForm(request.POST, instance=MCQuestions) 
     #cat = Categories.objects.filter(cid=course_id) 
     aform_valid = aform.is_valid() 
     **bform_valid = bform.is_valid()** 
     if aform_valid and bform_valid: 
      a = aform.save(commit=False) 
      a.qcategory_id = course_id 
      a.save() 
      b = bform.save(commit=False) 
      b.save() 
      return HttpResponse('question added') 
    else: 
     aform = MCQuestionsForm() 
     bform = MCAnswersForm() 
     bform.qcategoryid = a 
    return render(request, 'teacher/mcquestionadd.html', {'aform': aform, 'bform': bform}) 

和错误是突出bform_valid = bform.is_valid()

+0

'instance = MCQuestions'必须是'MCQ的实例问题 - 不是课堂本身。 – karthikr

+1

其实@karthikr,它应该是MCAnswers的一个实例。 –

+0

嗯,MCAnswers的实例?实例你的意思是这样的: 'instance = MCQuestions.questionid'我得到这个错误 ''ReverseSingleRelatedObjectDescriptor'对象没有属性'_meta'' – Zorig

回答

1

此:

bform = MCAnswersForm(request.POST, instance=MCQuestions) 

应该是:

bform = MCAnswersForm(request.POST, instance=answers) 

其中answersMCAnswers一个实例。目前还没有答案(您即将创建它),所以现在就从代码中移除它。


您需要将前缀添加到您的表格,以便验证将正常工作,你最好给这些给有意义的名称(不aform

question_form = MCQuestionsForm(request.POST, prefix="question") 
    answer_form = MCAnswersForm(request.POST, prefix="answers") 

最后保存,这样做 - 您错过了从问题到答案的链接:

if question_form.is_valid() and answer_form.is_valid(): 
     question = question_form.save(commit=False) 
     question.qcategory_id = course_id 
     question.save() 

     answer = bform.save(commit=False) 
     answer.question = question 
     answer.save() 

     return HttpRedirect(reverse('...'))