0

I have four forms and I need them to be saved one by one however when any one form yields validation error then I need the data saved in the database to be removed. I understand the transaction rollback with Django query but not able to figure out that how would I will do the same with forms.

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')

I tried

with transaction.atomic():

and thought it will work because forms also saves data in db

mayank
  • 1

0 Answers0