Jason Howard
Jason Howard

Reputation: 1586

Ajax in function based view

I've come a cross a lot of tutorials regarding how to setup a class based view for ajax. Example:

class JoinFormView(FormView):
    form_class = JoinForm
    template_name  = 'forms/ajax.html'
    success_url = '/form-success/'

    def form_valid(self, form):
        response = super(JoinFormView, self).form_valid(form)
        if self.request.is_ajax():
            print(form.cleaned_data)
            data = {
                'message': "Successfully submitted form data."
            }
            return JsonResponse(data)
        else:
            return response

I'm wondering how would insert the required code for ajax into this function based view. Does the code required depend on whether or not I want to pull from or write to the db asynchronously?

def my_func_view(request):
    template = 'accounts/profile.html'
    form = Form123(request.POST or None)    

    if request.method == 'POST':
        if form.is_valid():
            instance = form.save(commit=True)
            return redirect('/accounts/profile/')

        else:
            messages.error(request, 'There was an error.')
            context = {'form': form,}
            return render(request, template, context)

    else:
        context = {'form': form,}

    return render(request, template, context)

Thanks for your help!

Upvotes: 1

Views: 84

Answers (1)

Exprator
Exprator

Reputation: 27503

you do the same thing for the function based view too..

from django.http import JsonResponse

def my_func_view(request):
    template = 'accounts/profile.html'
    form = Form123(request.POST or None)    

    if request.is_ajax():
        if form.is_valid():
            instance = form.save(commit=True)
            return JsonResponse({'status':'data'})

        else:
            messages.error(request, 'There was an error.')
            return JsonResponse({'status':'data'})

    else:
        context = {'form': form,}

    return render(request, template, context)

Upvotes: 1

Related Questions