def clone_button(instance): url = reverse(_get_viewname(instance, 'add')) # Populate cloned field values param_string = prepare_cloned_fields(instance) if param_string: url = f'{url}?{param_string}' return { 'url': url, }
def clone_button(instance): viewname = _get_viewname(instance, 'add') # Populate cloned field values param_string = prepare_cloned_fields(instance) if param_string: url = '{}?{}'.format(reverse(viewname), param_string) return { 'url': url, }
def post(self, request, *args, **kwargs): logger = logging.getLogger('netbox.views.ObjectEditView') form = self.model_form(request.POST, request.FILES, instance=self.obj) if form.is_valid(): logger.debug("Form validation was successful") obj = form.save() msg = '{} {}'.format( 'Created' if not form.instance.pk else 'Modified', self.model._meta.verbose_name) logger.info(f"{msg} {obj} (PK: {obj.pk})") if hasattr(obj, 'get_absolute_url'): msg = '{} <a href="{}">{}</a>'.format(msg, obj.get_absolute_url(), escape(obj)) else: msg = '{} {}'.format(msg, escape(obj)) messages.success(request, mark_safe(msg)) if '_addanother' in request.POST: # If the object has clone_fields, pre-populate a new instance of the form if hasattr(obj, 'clone_fields'): url = '{}?{}'.format(request.path, prepare_cloned_fields(obj)) return redirect(url) return redirect(request.get_full_path()) return_url = form.cleaned_data.get('return_url') if return_url is not None and is_safe_url( url=return_url, allowed_hosts=request.get_host()): return redirect(return_url) else: return redirect(self.get_return_url(request, obj)) else: logger.debug("Form validation failed") return render( request, self.template_name, { 'obj': self.obj, 'obj_type': self.model._meta.verbose_name, 'form': form, 'return_url': self.get_return_url(request, self.obj), })
def post(self, request, *args, **kwargs): obj = self.get_object(kwargs) obj = self.alter_obj(obj, request, args, kwargs) form = self.model_form(request.POST, request.FILES, instance=obj) if form.is_valid(): obj_created = not form.instance.pk obj = form.save() msg = '{} {}'.format('Created' if obj_created else 'Modified', self.model._meta.verbose_name) if hasattr(obj, 'get_absolute_url'): msg = '{} <a href="{}">{}</a>'.format(msg, obj.get_absolute_url(), escape(obj)) else: msg = '{} {}'.format(msg, escape(obj)) messages.success(request, mark_safe(msg)) if '_addanother' in request.POST: # If the object has clone_fields, pre-populate a new instance of the form if hasattr(obj, 'clone_fields'): url = '{}?{}'.format(request.path, prepare_cloned_fields(obj)) return redirect(url) return redirect(request.get_full_path()) return_url = form.cleaned_data.get('return_url') if return_url is not None and is_safe_url( url=return_url, allowed_hosts=request.get_host()): return redirect(return_url) else: return redirect(self.get_return_url(request, obj)) return render( request, self.template_name, { 'obj': obj, 'obj_type': self.model._meta.verbose_name, 'form': form, 'return_url': self.get_return_url(request, obj), })
def post(self, request, *args, **kwargs): logger = logging.getLogger("netbox.views.ObjectEditView") obj = self.alter_obj(self.get_object(kwargs), request, args, kwargs) form = self.model_form(data=request.POST, files=request.FILES, instance=obj) if form.is_valid(): logger.debug("Form validation was successful") try: with transaction.atomic(): object_created = form.instance.pk is None obj = form.save() # Check that the new object conforms with any assigned object-level permissions self.queryset.get(pk=obj.pk) msg = "{} {}".format( "Created" if object_created else "Modified", self.queryset.model._meta.verbose_name, ) logger.info(f"{msg} {obj} (PK: {obj.pk})") if hasattr(obj, "get_absolute_url"): msg = '{} <a href="{}">{}</a>'.format( msg, obj.get_absolute_url(), escape(obj)) else: msg = "{} {}".format(msg, escape(obj)) messages.success(request, mark_safe(msg)) if "_addanother" in request.POST: # If the object has clone_fields, pre-populate a new instance of the form if hasattr(obj, "clone_fields"): url = "{}?{}".format(request.path, prepare_cloned_fields(obj)) return redirect(url) return redirect(request.get_full_path()) return_url = form.cleaned_data.get("return_url") if return_url is not None and is_safe_url( url=return_url, allowed_hosts=request.get_host()): return redirect(return_url) else: return redirect(self.get_return_url(request, obj)) except ObjectDoesNotExist: msg = "Object save failed due to object-level permissions violation" logger.debug(msg) form.add_error(None, msg) else: logger.debug("Form validation failed") return render( request, self.template_name, { "obj": obj, "obj_type": self.queryset.model._meta.verbose_name, "form": form, "return_url": self.get_return_url(request, obj), }, )