コード例 #1
0
ファイル: buttons.py プロジェクト: ypid/netbox
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,
    }
コード例 #2
0
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,
    }
コード例 #3
0
ファイル: views.py プロジェクト: sky365365/netbox
    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),
            })
コード例 #4
0
ファイル: views.py プロジェクト: vrnaveenkr/netbox
    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),
            })
コード例 #5
0
    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),
            },
        )