Как я могу использовать откат транзакции с несколькими формами в 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

Вернуться на верх