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:
@ -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')
|
||||||
)
|
)
|
||||||
|
@ -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 []
|
|
||||||
|
@ -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,
|
||||||
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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
|
||||||
|
@ -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 %}
|
||||||
|
|
||||||
|
@ -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 %}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
Reference in New Issue
Block a user