mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 21:25:42 +00:00 
			
		
		
		
	Add a generic DeleteForm and update AjaxDeleteView
This commit is contained in:
		| @@ -17,3 +17,19 @@ class HelperForm(forms.ModelForm): | |||||||
|         self.helper = FormHelper() |         self.helper = FormHelper() | ||||||
|  |  | ||||||
|         self.helper.form_tag = False |         self.helper.form_tag = False | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class DeleteForm(forms.Form): | ||||||
|  |     """ Generic deletion form which provides simple user confirmation  | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     confirm_delete = forms.BooleanField( | ||||||
|  |         required=False, | ||||||
|  |         initial=False, | ||||||
|  |         help_text='Confirm item deletion' | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     class Meta: | ||||||
|  |         fields = [ | ||||||
|  |             'confirm_delete' | ||||||
|  |         ] | ||||||
|   | |||||||
| @@ -17,6 +17,9 @@ from django.views.generic.base import TemplateView | |||||||
|  |  | ||||||
| from part.models import Part | from part.models import Part | ||||||
|  |  | ||||||
|  | from .forms import DeleteForm | ||||||
|  | from .helpers import str2bool | ||||||
|  |  | ||||||
| from rest_framework import views | from rest_framework import views | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -300,13 +303,28 @@ class AjaxUpdateView(AjaxMixin, UpdateView): | |||||||
|         return self.renderJsonResponse(request, form, data) |         return self.renderJsonResponse(request, form, data) | ||||||
|  |  | ||||||
|  |  | ||||||
| class AjaxDeleteView(AjaxMixin, DeleteView): | class AjaxDeleteView(AjaxMixin, UpdateView): | ||||||
|  |  | ||||||
|     """ An 'AJAXified DeleteView for removing an object from the DB |     """ An 'AJAXified DeleteView for removing an object from the DB | ||||||
|     - Returns a HTML object (not a form!) in JSON format (for delivery to a modal window) |     - Returns a HTML object (not a form!) in JSON format (for delivery to a modal window) | ||||||
|     - Handles deletion |     - Handles deletion | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|  |     form_class = DeleteForm | ||||||
|  |     ajax_form_title = "Delete Item" | ||||||
|  |     ajax_template_name = "modal_delete_form.html" | ||||||
|  |     context_object_name = 'item' | ||||||
|  |  | ||||||
|  |     def get_object(self): | ||||||
|  |         try: | ||||||
|  |             self.object = self.model.objects.get(pk=self.kwargs['pk']) | ||||||
|  |         except: | ||||||
|  |             return None | ||||||
|  |         return self.object | ||||||
|  |  | ||||||
|  |     def get_form(self): | ||||||
|  |         return self.form_class(self.get_form_kwargs()) | ||||||
|  |  | ||||||
|     def get(self, request, *args, **kwargs): |     def get(self, request, *args, **kwargs): | ||||||
|         """ Respond to GET request |         """ Respond to GET request | ||||||
|  |  | ||||||
| @@ -314,19 +332,15 @@ class AjaxDeleteView(AjaxMixin, DeleteView): | |||||||
|         - Return rendered form to client |         - Return rendered form to client | ||||||
|         """ |         """ | ||||||
|  |  | ||||||
|         super(DeleteView, self).get(request, *args, **kwargs) |         super(UpdateView, self).get(request, *args, **kwargs) | ||||||
|  |  | ||||||
|         data = { |         form = self.get_form() | ||||||
|             'id': self.get_object().id, |  | ||||||
|             'delete': False, |  | ||||||
|             'title': self.ajax_form_title, |  | ||||||
|             'html_data': render_to_string( |  | ||||||
|                 self.ajax_template_name, |  | ||||||
|                 self.get_context_data(), |  | ||||||
|                 request=request) |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return JsonResponse(data) |         context = self.get_context_data() | ||||||
|  |  | ||||||
|  |         context[self.context_object_name] = self.get_object() | ||||||
|  |  | ||||||
|  |         return self.renderJsonResponse(request, form, context=context) | ||||||
|  |  | ||||||
|     def post(self, request, *args, **kwargs): |     def post(self, request, *args, **kwargs): | ||||||
|         """ Respond to POST request |         """ Respond to POST request | ||||||
| @@ -337,14 +351,24 @@ class AjaxDeleteView(AjaxMixin, DeleteView): | |||||||
|  |  | ||||||
|         obj = self.get_object() |         obj = self.get_object() | ||||||
|         pk = obj.id |         pk = obj.id | ||||||
|  |  | ||||||
|  |         form = self.get_form() | ||||||
|  |  | ||||||
|  |         confirmed = str2bool(request.POST.get('confirm_delete', False)) | ||||||
|  |         context = self.get_context_data() | ||||||
|  |  | ||||||
|  |         if confirmed: | ||||||
|             obj.delete() |             obj.delete() | ||||||
|  |         else: | ||||||
|  |             form.errors['confirm_delete'] = ['Check box to confirm item deletion'] | ||||||
|  |             context[self.context_object_name] = self.get_object() | ||||||
|  |  | ||||||
|         data = { |         data = { | ||||||
|             'id': pk, |             'id': pk, | ||||||
|             'delete': True |             'form_valid': confirmed | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return self.renderJsonResponse(request, data=data) |         return self.renderJsonResponse(request, form, data=data, context=context) | ||||||
|  |  | ||||||
|  |  | ||||||
| class IndexView(TemplateView): | class IndexView(TemplateView): | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								InvenTree/templates/modal_delete_form.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								InvenTree/templates/modal_delete_form.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | {% extends "modal_form.html" %} | ||||||
		Reference in New Issue
	
	Block a user