Формсет сохраняет дубликаты записей

Моя система позволяет пользователю добавлять вопросы в форму при нажатии на кнопку Add More. Я использую набор форм для создания и добавления нового вопроса. Я пытаюсь сохранить набор форм в базе данных, однако при сохранении в базе данных я заметил, что есть дублирующиеся записи. Как предотвратить дублирование записей/ сохранить только новые записи из набора форм.

add_quiz_questions.html

 {% load crispy_forms_tags %}
  <div class="container-fluid p-5">
    <!-- Main Content Here -->
    <form method="POST" enctype="multipart/form-data">
      {% csrf_token %}
      {{ questionformset.management_form }}

      <div id="question-form-list">

        {% for question in questionformset %}
        <script type="text/javascript" src="/static/selectable/js/jquery.dj.selectable.js"></script>
        <div class="card shadow mb-4">
            <div class="question-form">               
              <div class="card-body">
                {{ question|crispy }}                   
              </div>
            </div>                
        </div>
        {% endfor %}
      </div>

      <div id="empty-form" style="display: none;">
        <div class="card shadow mb-4">            
            <div class="card-body">
              {{ questionformset.empty_form|crispy }}
            </div>           
        </div>
      </div>

      <button type="button" class="btn btn-info" id="add-more"> Add Question</button>
      <button type="submit" class="btn btn-primary">Save</button>
    </form>
  </div>
  <!-- /.container-fluid -->
</div>

<script>
  $('#add-more').click(function() {
      var form_idx = $('#id_form-TOTAL_FORMS').val();
      $('#question-form-list').append($('#empty-form').html().replace(/__prefix__/g, form_idx));
      $('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
  });
</script>

views.py

def createQuizQuestion(request,pk):
user_id = Users.objects.get(user=request.user)
quizzes = Quiz.objects.get(id=pk)

for row in QuizQuestion.objects.filter(quiz=quizzes).reverse():
    if QuizQuestion.objects.filter(quiz_id=row.quiz_id, question=row.question).count()>1:
        print(row)

question = QuizQuestion.objects.filter(quiz=quizzes)
QuestionFormSet = modelformset_factory(QuizQuestion, form=QuizQuestionForm, extra=0)
questionformset = QuestionFormSet(request.POST or None, queryset=question)

if request.method == "POST":
    questionformset = QuestionFormSet(request.POST or None, queryset=question)
    
    if questionformset.is_valid():
        print(questionformset.cleaned_data)
        for questionform in questionformset:
            if questionform.is_valid():
                if questionform.has_changed():
                    question = questionform.save(commit=False)
                    question.user = user_id
                    question.quiz_id = quizzes.id
                    question.save()
                    print(questionform.cleaned_data)

context = { 'questionformset' : questionformset, 'quizzes': quizzes }



for row in QuizQuestion.objects.filter(quiz=quizzes).reverse():
    if QuizQuestion.objects.filter(quiz_id=row.quiz_id, question=row.question).count()>1:
        print(row)

return render(request, 'assessments/add_quiz_questions.html', context)

forms.py

class QuizQuestionForm(forms.ModelForm):
class Meta:
    model = QuizQuestion
    fields = ['question', 'answer1', 'answer2', 'answer3', 'answer4', 'correct_answer']
    exclude = ('user', 'quiz', 'created')
Вернуться на верх