Формсет сохраняет дубликаты записей
Моя система позволяет пользователю добавлять вопросы в форму при нажатии на кнопку 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')