Как я могу использовать откат транзакции с несколькими формами в Django
У меня есть четыре формы, и мне нужно, чтобы они сохранялись одна за другой, но когда какая-либо из форм выдает ошибку валидации, мне нужно, чтобы данные, сохраненные в базе данных, были удалены. Я понимаю откат транзакции с помощью Django query, но не могу понять, как мне сделать то же самое с формами.
with transaction.atomic():
# to store errors from the forms if any
errors = []
# FormSubmitter are the function to submit the forms or provide the errors.
cartoon_image_form_submitter = CartoonImageFormSubmitter(
data=cartoon,
request=request,
form_model_keys=CartoonImage_form_model_keys,
)
if ('errors' in cartoon_image_form_submitter and cartoon_image_form_submitter['errors'] is not None):
errors.append(cartoon_image_form_submitter["errors"])
swimming_level_master_form_submitter = SwimmingLevelMasterFormSubmitter(
data=swimming_level_master,
form_model_keys=SwimmingLevelMaster_form_model_keys,
)
if ('errors' in swimming_level_master_form_submitter and swimming_level_master_form_submitter['errors'] is not None):
errors.append(swimming_level_master_form_submitter["errors"])
stages_summary_form_submitter = StagesSummaryFormSubmitter(
data=stages_summary,
form_model_keys=StagesSummary_form_model_keys,
)
if ('errors' in stages_summary_form_submitter and stages_summary_form_submitter['errors'] is not None):
errors.append(stages_summary_form_submitter["errors"])
lesson_level_detail_form_submitter = LessonLevelDetailFormSubmitter(
data=lesson_level_details,
form_model_keys=LessonLevelDetail_form_model_keys,
)
if ('errors' in lesson_level_detail_form_submitter and lesson_level_detail_form_submitter['errors'] is not None):
errors.append(lesson_level_detail_form_submitter["errors"])
if errors:
errors = '<br>'.join([str(elem) for elem in errors])
from django.utils.safestring import mark_safe
errors = mark_safe(errors)
messages.error(request, errors)
return HttpResponseRedirect('../levels/new')
return HttpResponseRedirect('../levels/new')
Я пытался
with transaction.atomic():
и думал, что это будет работать, потому что формы также сохраняют данные в db