2017-07-08 26 views
0

我正在一個web應用程序每當我保存到模型,節省了真/假答案,選擇題的答案相同的模型(答案)如何強制添加不變的Django實例數據庫

class Answer(models.Model): 
    question = models.ForeignKey(Question, related_name='answers') 
    correct = models.BooleanField() 
    a_text = models.CharField(max_length=255, null=True, blank=True) 
    created = models.DateTimeField(auto_now_add="True") 

工作我刪除現有的這個模型的數據,並打算在實例request.POST從數據重新填充

然後我讀了Django文檔在

save()方法返回已保存到數據庫的實例。如果給定的實例的數據在綁定數據中未更改,則實例將不會保存到數據庫,並且不會包含在返回值(上例中的實例)中。

請幫幫忙,我卡住了。

這裏是我的形式聲明

class AnswerForm(ModelForm): 
    class Meta: 
     model = Answer 
     fields = ['a_text', 'correct'] 
     widgets = { 
      'correct': RadioSelect(choices=[(True, "True"), (False, "False")]) 
     } 

AnswerFormSet = modelformset_factory(
    Answer, 
    fields = ('a_text', 'correct'), 
    max_num = 4, 
    min_num = 4) 

這是我的看法

def create_question(request, quiz_id, que_id=None): 
    quiz = get_object_or_404(Quiz, id=quiz_id) 
    created_questions = Question.objects.filter(quiz=quiz_id) 

    if que_id: 
     que_id = int(que_id) 
     que = get_object_or_404(Question, id=que_id, quiz=quiz) 

     question_form = QuestionForm(instance=que) 

     if que.question_type == 'multiplechoice': 
      multiple_choice_answer_form = AnswerFormSet(
              queryset=que.answers.all(), 
              ) 
      truefalse_answer_form = AnswerForm() 
     elif que.question_type == 'truefalse': 
      multiple_choice_answer_form = AnswerFormSet(
              queryset=que.answers.none(), 
              ) 
      for ans_form in que.answers.all(): 
       truefalse_answer_form = AnswerForm(instance=ans_form) 


    else: 
     question_form = QuestionForm() 
     truefalse_answer_form = AnswerForm() 
     multiple_choice_answer_form = AnswerFormSet(queryset=Answer.objects.none()) 

    if request.method == 'POST': 
     # import pdb; pdb.set_trace(); 
     if que_id: 
      question_form = QuestionForm(instance=que, data=request.POST, files=request.FILES) 
      if que.question_type == 'multiplechoice': 
       multiple_choice_answer_form = AnswerFormSet(
               data=request.POST, 
               queryset=que.answers.all()) 
       truefalse_answer_form = AnswerForm(data=request.POST) 

      elif que.question_type == 'truefalse': 
       multiple_choice_answer_form = AnswerFormSet(data=request.POST, queryset=que.answers.none()) 
       for ans_form in que.answers.all(): 
        truefalse_answer_form = AnswerForm(data=request.POST, instance=ans_form) 

     else: 
      question_form = QuestionForm(data=request.POST, files=request.FILES) 
      truefalse_answer_form = AnswerForm(request.POST) 
      multiple_choice_answer_form = AnswerFormSet(request.POST, queryset=que.answers.all()) 

     if question_form.is_valid() and truefalse_answer_form.is_valid() and multiple_choice_answer_form.is_valid(): 

      question = question_form.save(commit=False) 
      question.quiz = quiz 
      question.save() 

      que_type = question_form['question_type'].data 


      if que_type == 'truefalse': 

       # delete existing data to avoid mixing the True/False and Multiple choice answers 
       if que_id: 
        for q in que.answers.all(): 
         q.delete() 

       truefalse = truefalse_answer_form.save(commit=False) 
       truefalse.question = question 
       truefalse.save() 
      elif que_type == 'multiplechoice': 

       multiple_choice = multiple_choice_answer_form.save(commit=False)    
       for multiple_choice_que in multiple_choice: 
        multiple_choice_que.question = question 
        multiple_choice_que.save() 



      if 'save' in request.POST: 
       print('Saving and Redirecting to edit Section...') 
       messages.success(request, 'Question saved successfully!') 
       return redirect('edit_question', quiz_id=quiz_id, que_id=question.id) 

      elif 'add_new' in request.POST: 
       question_form = QuestionForm() 
       truefalse_answer_form = AnswerForm() 
       messages.success(request, 'Question added successfully!') 
       print("Add new question") 

       return redirect('create_question', quiz_id=quiz_id) 
     else: 
      messages.error(request, 'An error was encountered!') 

    return render(request, 'quiz/question/create.html', {'question_form': question_form, 
                  'quiz': quiz, 
                  'que_id': que_id, 
                  'created_questions': created_questions, 
                  'multiple_choice': multiple_choice_answer_form, 
                  'truefalse': truefalse_answer_form }) 

回答

0

我能夠在我的模型創建另一個領域得到了解決我的問題,我刪除了早期的問題對象通過檢查額外的模型字段是否爲真。

相關問題