2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-07-16 01:36:29 +00:00

Generic AjaxCreateView

- Allows for same form to be posted
This commit is contained in:
Oliver
2018-04-25 14:10:56 +10:00
parent 8bc4050d05
commit d88da28871
6 changed files with 98 additions and 59 deletions

View File

@@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.template.loader import render_to_string
from django.http import JsonResponse
from django.views.generic import UpdateView, CreateView, DeleteView
class AjaxView(object):
ajax_form_action = ''
ajax_form_title = ''
ajax_submit_text = 'Submit'
def getAjaxTemplate(self):
if hasattr(self, 'ajax_template_name'):
return self.ajax_template_name
else:
return self.template_name
def renderJsonResponse(self, request, form):
context = {'form': form,
'form_action': self.ajax_form_action,
'form_title': self.ajax_form_title,
'submit_text': self.ajax_submit_text,
}
data = {'form_valid': form.is_valid()}
data['html_form'] = render_to_string(
self.getAjaxTemplate(),
context,
request=request
)
return JsonResponse(data)
class AjaxCreateView(AjaxView, CreateView):
def post(self, request):
if request.is_ajax():
form = self.form_class(request.POST)
if form.is_valid():
form.save()
return self.renderJsonResponse(request, form)
else:
return super(CreateView, self).post(request)
def get(self, request):
if request.is_ajax():
form = self.form_class()
return self.renderJsonResponse(request, form)
else:
return super(CreateView, self).post(request)