1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

#4624: Refactor ObjectEditView to use a queryset

This commit is contained in:
Jeremy Stretch
2020-05-11 12:37:22 -04:00
parent 43ad9aa2b1
commit 87fa6bc252
8 changed files with 65 additions and 64 deletions

View File

@@ -216,21 +216,22 @@ class ObjectEditView(GetReturnURLMixin, View):
"""
Create or edit a single object.
model: The model of the object being edited
queryset: The base queryset for the model being modified
model_form: The form used to create or edit the object
template_name: The name of the template
"""
model = None
queryset = None
model_form = None
template_name = 'utilities/obj_edit.html'
def get_object(self, kwargs):
# Look up object by slug or PK. Return None if neither was provided.
# Look up an existing object by slug or PK, if provided.
if 'slug' in kwargs:
return get_object_or_404(self.model, slug=kwargs['slug'])
return get_object_or_404(self.queryset, slug=kwargs['slug'])
elif 'pk' in kwargs:
return get_object_or_404(self.model, pk=kwargs['pk'])
return self.model()
return get_object_or_404(self.queryset, pk=kwargs['pk'])
# Otherwise, return a new instance.
return self.queryset.model()
def alter_obj(self, obj, request, url_args, url_kwargs):
# Allow views to add extra info to an object before it is processed. For example, a parent object can be defined
@@ -249,7 +250,7 @@ class ObjectEditView(GetReturnURLMixin, View):
return render(request, self.template_name, {
'obj': self.obj,
'obj_type': self.model._meta.verbose_name,
'obj_type': self.queryset.model._meta.verbose_name,
'form': form,
'return_url': self.get_return_url(request, self.obj),
})
@@ -264,7 +265,7 @@ class ObjectEditView(GetReturnURLMixin, View):
obj = form.save()
msg = '{} {}'.format(
'Created' if not form.instance.pk else 'Modified',
self.model._meta.verbose_name
self.queryset.model._meta.verbose_name
)
logger.info(f"{msg} {obj} (PK: {obj.pk})")
if hasattr(obj, 'get_absolute_url'):
@@ -293,7 +294,7 @@ class ObjectEditView(GetReturnURLMixin, View):
return render(request, self.template_name, {
'obj': self.obj,
'obj_type': self.model._meta.verbose_name,
'obj_type': self.queryset.model._meta.verbose_name,
'form': form,
'return_url': self.get_return_url(request, self.obj),
})