Как включить Ajax в CreateView?

У меня есть CreateView... и он отлично работает в традиционном смысле. Я пытаюсь преобразовать его по существу в AJAX для отправки, потому что пользователь может прикреплять файлы к форме, и я пытаюсь избежать ошибки отправки формы, основанной на ошибках пользователя. Вот мой CreateView...

class CreateProcedureView(LoginRequiredMixin,CreateView):
    model = NewProcedure
    form_class = CreateProcedureForm
    template_name = 'create_procedure.html'

   def form_valid(self, form):
        instance = form.save()

    def post(self, request, *args, **kwargs):
        if "cancel" in request.POST:
            return HttpResponseRedirect(reverse('Procedures:procedure_main_menu'))
        else:
            self.object = None
            user = request.user
            form_class = self.get_form_class()
            form = self.get_form(form_class)
            file_form = NewProcedureFilesForm(request.POST, request.FILES)
            files = request.FILES.getlist('file[]')
            if form.is_valid() and file_form.is_valid():
                procedure_instance = form.save(commit=False)
                procedure_instance.user = user
                procedure_instance.save()
                list=[]
                for f in files:
                    procedure_file_instance = NewProcedureFiles(attachments=f, new_procedure=procedure_instance)
                    procedure_file_instance.save()
                return self.form_valid(form)
            else:
                form_class = self.get_form_class()
                form = self.get_form(form_class)
                file_form = NewProcedureFilesForm(request.POST, request.FILES)
                return self.form_invalid(form)

Как уже было сказано, он прекрасно работает так, как есть. Я пытаюсь понять, как мне лучше всего преобразовать это в подход типа AJAX? Вот что у меня есть на данный момент...

Вот мой AJAX...

$(document).ready(function (){

  $("#forms").on('submit', function(event) {
        event.preventDefault();
        var newprocedure = '{{ newprocedure }}';
        $.ajax({
            type: "POST",
            url: "{% url 'Procedures:ajax_posting' %}",
            data:{
                  newprocedure:newprocedure,
                 'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
            },
            datatype:'json',
            success: function(data) {
              if (data['success'])
                 alert("successfully added to favorites")
            }
        });
   });
   });

А вот представление, которое я пытаюсь вызвать...

def ajax_posting(request):
    data = {'success': False}
    form = CreateProcedureForm(request.user,request.POST)
    if request.method=='POST':
        data['success'] = True
    else:
        print(form.errors)    
    return JsonResponse(data)

Я вижу, что он вызывает представление, потому что print(form.errors) показывает мне кучу ошибок для обязательных полей, и я ожидал этого, потому что форма, похоже, не обрабатывается после того, как я заполняю ее и нажимаю submit, абсолютно ничего не происходит.

Заранее спасибо за любые мысли. Я новичок во всей этой истории с AJAX.

Для обработки вы можете использовать свой предыдущий вид. Его нужно только немного подправить.

При отправке вы хотите установить вашу форму как JS FormData в вашем ajax скрипте

data:  FormData(forms[0])

Вы можете получить данные с помощью django таким образом

data = request.POST

И затем инстанцируйте его с вашей формой django для обработки таким образом

form = RegForm(data=data)
Вернуться на верх