2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-29 20:16:44 +00:00

More cleanup for modal forms

- Require 'ajax_template_name' to be set or weird things happen!
This commit is contained in:
Oliver Walters 2019-04-16 21:25:20 +10:00
parent c0dd253137
commit be60fbcc25
4 changed files with 69 additions and 11 deletions

View File

@ -90,12 +90,16 @@ class AjaxMixin(object):
class AjaxView(AjaxMixin, View): class AjaxView(AjaxMixin, View):
""" Bare-bones AjaxView """ """ Bare-bones AjaxView """
# By default, point to the modal_form template
# (this can be overridden by a child class)
ajax_template_name = 'modal_form.html'
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
return JsonResponse('', safe=False) return JsonResponse('', safe=False)
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
return self.renderJsonResponse(request, **kwargs) return self.renderJsonResponse(request)
class AjaxCreateView(AjaxMixin, CreateView): class AjaxCreateView(AjaxMixin, CreateView):
@ -151,13 +155,16 @@ class AjaxUpdateView(AjaxMixin, UpdateView):
""" """
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
html_response = super(UpdateView, self).get(request, *args, **kwargs)
if request.is_ajax(): if request.is_ajax():
form = self.form_class(instance=self.get_object()) form = self.form_class(instance=self.get_object())
return self.renderJsonResponse(request, form) return self.renderJsonResponse(request, form)
else: else:
return super(UpdateView, self).post(request, *args, **kwargs) return html_response
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
@ -177,7 +184,7 @@ class AjaxUpdateView(AjaxMixin, UpdateView):
return response return response
else: else:
return response return super(UpdateView, self).post(request, *args, **kwargs)

View File

@ -19,8 +19,9 @@ part_detail_urls = [
url(r'^edit/?', views.PartEdit.as_view(), name='part-edit'), url(r'^edit/?', views.PartEdit.as_view(), name='part-edit'),
url(r'^delete/?', views.PartDelete.as_view(), name='part-delete'), url(r'^delete/?', views.PartDelete.as_view(), name='part-delete'),
url(r'^track/?', views.PartDetail.as_view(template_name='part/track.html'), name='part-track'), url(r'^track/?', views.PartDetail.as_view(template_name='part/track.html'), name='part-track'),
url(r'^bom-export/?', views.BomExport.as_view(), name='bom-export'),
url(r'^bom-download/?', views.BomDownload.as_view(), name='bom-download'),
url(r'^bom/?', views.PartDetail.as_view(template_name='part/bom.html'), name='part-bom'), url(r'^bom/?', views.PartDetail.as_view(template_name='part/bom.html'), name='part-bom'),
url(r'^export-bom/?', views.BomExport.as_view(), name='bom-export'),
url(r'^build/?', views.PartDetail.as_view(template_name='part/build.html'), name='part-build'), url(r'^build/?', views.PartDetail.as_view(template_name='part/build.html'), name='part-build'),
url(r'^stock/?', views.PartDetail.as_view(template_name='part/stock.html'), name='part-stock'), url(r'^stock/?', views.PartDetail.as_view(template_name='part/stock.html'), name='part-stock'),
url(r'^used/?', views.PartDetail.as_view(template_name='part/used_in.html'), name='part-used-in'), url(r'^used/?', views.PartDetail.as_view(template_name='part/used_in.html'), name='part-used-in'),

View File

@ -3,8 +3,8 @@ from __future__ import unicode_literals
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy from django.template.loader import render_to_string
from django.urls import reverse_lazy, reverse
from django.views.generic import DetailView, ListView from django.views.generic import DetailView, ListView
from company.models import Company from company.models import Company
@ -19,7 +19,7 @@ from .forms import BomExportForm
from .forms import EditSupplierPartForm from .forms import EditSupplierPartForm
from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDeleteView from InvenTree.views import AjaxMixin, AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDeleteView
from InvenTree.helpers import DownloadFile from InvenTree.helpers import DownloadFile
@ -117,20 +117,70 @@ class PartImage(AjaxUpdateView):
class PartEdit(AjaxUpdateView): class PartEdit(AjaxUpdateView):
model = Part model = Part
form_class = EditPartForm
template_name = 'part/edit.html' template_name = 'part/edit.html'
form_class = EditPartForm
ajax_template_name = 'modal_form.html' ajax_template_name = 'modal_form.html'
ajax_form_title = 'Edit Part Properties' ajax_form_title = 'Edit Part Properties'
context_object_name = 'part'
class BomExport(AjaxView): class BomExport(AjaxView):
model = Part
ajax_form_title = 'Export BOM'
template_name = 'part/bom_export.html'
#template_name = 'modal_form.html'
context_object_name = 'part'
form_class = BomExportForm
def get(self, request, *args, **kwargs):
form = self.form_class()
part = get_object_or_404(Part, pk=self.kwargs['pk'])
context = {
'part': part
}
return self.renderJsonResponse(request, form, context=context)
def post(self, request, *args, **kwargs):
return super(AjaxView, self).post(request, *args, **kwargs)
"""
def get(self, request, *args, **kwargs):
data = {
'title': 'Export BOM',
'html_data': render_to_string(self.getAjaxTemplate(),
self.get_context_data(),
request=request)
}
return JsonResponse(data)
"""
def get_data(self):
return {
#'form_valid': True,
#'redirect': '/'
#'redirect': reverse('bom-download', kwargs={'pk': self.request.GET.get('pk')})
}
class BomDownload(AjaxView):
"""
Provide raw download of a BOM file.
- File format should be passed as a query param e.g. ?format=csv
"""
# TODO - This should no longer extend an AjaxView! # TODO - This should no longer extend an AjaxView!
model = Part model = Part
#form_class = BomExportForm #form_class = BomExportForm
#template_name = 'part/bom_export.html' #template_name = 'part/bom_export.html'
#ajax_form_title = 'Export Bill of Materials' #ajax_form_title = 'Export Bill of Materials'
#ajax_submit_text = 'Export'
#context_object_name = 'part' #context_object_name = 'part'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
@ -157,6 +207,7 @@ class PartDelete(AjaxDeleteView):
template_name = 'part/delete.html' template_name = 'part/delete.html'
ajax_template_name = 'part/partial_delete.html' ajax_template_name = 'part/partial_delete.html'
ajax_form_title = 'Confirm Part Deletion' ajax_form_title = 'Confirm Part Deletion'
context_object_name = 'part'
success_url = '/part/' success_url = '/part/'
@ -241,7 +292,6 @@ class BomItemCreate(AjaxCreateView):
template_name = 'part/bom-create.html' template_name = 'part/bom-create.html'
ajax_template_name = 'modal_form.html' ajax_template_name = 'modal_form.html'
ajax_form_title = 'Create BOM item' ajax_form_title = 'Create BOM item'
ajax_submit_text = 'Create'
def get_initial(self): def get_initial(self):
# Look for initial values # Look for initial values

View File

@ -82,7 +82,7 @@ class StockItemEdit(AjaxUpdateView):
form_class = EditStockItemForm form_class = EditStockItemForm
template_name = 'stock/item_edit.html' template_name = 'stock/item_edit.html'
context_object_name = 'item' context_object_name = 'item'
ajax_template_name = 'modal_form.html' #ajax_template_name = 'modal_form.html'
ajax_form_title = 'Edit Stock Item' ajax_form_title = 'Edit Stock Item'