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

#6454 changes from PR review

This commit is contained in:
Arthur
2022-08-22 11:46:41 -07:00
parent c65a291698
commit a972174706
8 changed files with 21 additions and 42 deletions

View File

@ -570,7 +570,6 @@ class RackRoleBulkDeleteView(generic.BulkDeleteView):
# #
class RackListView(generic.ObjectListView): class RackListView(generic.ObjectListView):
required_prerequisites = [Site]
queryset = Rack.objects.annotate( queryset = Rack.objects.annotate(
device_count=count_related(Device, 'rack') device_count=count_related(Device, 'rack')
) )

View File

@ -28,6 +28,14 @@ class NetBoxFeatureSet(
class Meta: class Meta:
abstract = True abstract = True
@classmethod
def get_prerequisite_models(cls):
"""
Return a list of model types that are required to create this model or empty list if none. This is used for
showing prequisite warnings in the UI on the list and detail views.
"""
return []
# #
# Base model classes # Base model classes
@ -53,10 +61,6 @@ class NetBoxModel(NetBoxFeatureSet, models.Model):
class Meta: class Meta:
abstract = True abstract = True
@classmethod
def get_prerequisite_models(cls):
return []
def clone(self): def clone(self):
""" """
Return a dictionary of attributes suitable for creating a copy of the current instance. This is used for pre- Return a dictionary of attributes suitable for creating a copy of the current instance. This is used for pre-
@ -109,10 +113,6 @@ class NestedGroupModel(NetBoxFeatureSet, MPTTModel):
def __str__(self): def __str__(self):
return self.name return self.name
@classmethod
def get_prerequisite_models(cls):
return []
def clean(self): def clean(self):
super().clean() super().clean()
@ -150,7 +150,3 @@ class OrganizationalModel(NetBoxFeatureSet, models.Model):
class Meta: class Meta:
abstract = True abstract = True
ordering = ('name',) ordering = ('name',)
@classmethod
def get_prerequisite_models(cls):
return []

View File

@ -172,12 +172,10 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin):
'table': table, 'table': table,
'actions': actions, 'actions': actions,
'filter_form': self.filterset_form(request.GET, label_suffix='') if self.filterset_form else None, 'filter_form': self.filterset_form(request.GET, label_suffix='') if self.filterset_form else None,
'prerequisite_model': requirement if requirement else None,
**self.get_extra_context(request), **self.get_extra_context(request),
} }
if requirement:
context['required_model'] = requirement
return render(request, self.template_name, context) return render(request, self.template_name, context)
@ -235,17 +233,6 @@ class BulkCreateView(GetReturnURLMixin, BaseMultiObjectView):
form = self.form() form = self.form()
model_form = self.model_form(initial=initial) model_form = self.model_form(initial=initial)
context = {
'obj_type': self.model_form._meta.model._meta.verbose_name,
'form': form,
'model_form': model_form,
'return_url': self.get_return_url(request),
**self.get_extra_context(request),
}
if requirement:
context['required_model'] = requirement
return render(request, self.template_name, { return render(request, self.template_name, {
'obj_type': self.model_form._meta.model._meta.verbose_name, 'obj_type': self.model_form._meta.model._meta.verbose_name,
'form': form, 'form': form,

View File

@ -341,24 +341,21 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView):
""" """
obj = self.get_object(**kwargs) obj = self.get_object(**kwargs)
obj = self.alter_object(obj, request, args, kwargs) obj = self.alter_object(obj, request, args, kwargs)
model = self.queryset.model
initial_data = normalize_querydict(request.GET) initial_data = normalize_querydict(request.GET)
form = self.form(instance=obj, initial=initial_data) form = self.form(instance=obj, initial=initial_data)
restrict_form_fields(form, request.user) restrict_form_fields(form, request.user)
context = { requirement = get_prerequisite_model(self.queryset)
return render(request, self.template_name, {
'model': model,
'object': obj, 'object': obj,
'form': form, 'form': form,
'return_url': self.get_return_url(request, obj), 'return_url': self.get_return_url(request, obj),
'prerequisite_model': requirement if requirement else None,
**self.get_extra_context(request, obj), **self.get_extra_context(request, obj),
} })
requirement = get_prerequisite_model(self.queryset)
if requirement:
context['required_model'] = requirement
context['model'] = self.queryset.model
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
""" """

View File

@ -1,12 +1,12 @@
def get_prerequisite_model(queryset): def get_prerequisite_model(queryset):
model = queryset.model model = queryset.model
if not queryset.count(): if not queryset.exists():
if hasattr(model, 'get_prerequisite_models'): if hasattr(model, 'get_prerequisite_models'):
prerequisites = model.get_prerequisite_models() prerequisites = model.get_prerequisite_models()
if prerequisites: if prerequisites:
for prereq in prerequisites: for prereq in prerequisites:
if not prereq.objects.count(): if not prereq.objects.exists():
return prereq return prereq
return None return None

View File

@ -40,7 +40,7 @@ Context:
</div> </div>
{% endif %} {% endif %}
{% if required_model %} {% if prerequisite_model %}
{% include 'inc/missing_prerequisites.html' %} {% include 'inc/missing_prerequisites.html' %}
{% endif %} {% endif %}

View File

@ -101,7 +101,7 @@ Context:
{# Object table #} {# Object table #}
{% if required_model %} {% if prerequisite_model %}
{% include 'inc/missing_prerequisites.html' %} {% include 'inc/missing_prerequisites.html' %}
{% endif %} {% endif %}

View File

@ -1,6 +1,6 @@
{% load buttons %} {% load buttons %}
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
<i class="mdi mdi-alert"></i> <strong>Note:</strong> Before you can add a {{ model|meta:"verbose_name" }} you must first create a <i class="mdi mdi-alert"></i> Before you can add a {{ model|meta:"verbose_name" }} you must first create a
<strong>{{ required_model|meta:"verbose_name"|title }}</strong> which can be added here: {% add_button required_model %} <strong>{{ prerequisite_model|meta:"verbose_name"|title }}</strong> which can be added here: {% add_button prerequisite_model %}
</div> </div>