mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 08:46:10 -06:00
12489 use htmx for site view locations and non-racked-devices
This commit is contained in:
parent
57156f0e94
commit
68874f249d
@ -377,21 +377,6 @@ class SiteView(generic.ObjectView):
|
|||||||
(Circuit.objects.restrict(request.user, 'view').filter(terminations__site=instance).distinct(), 'site_id'),
|
(Circuit.objects.restrict(request.user, 'view').filter(terminations__site=instance).distinct(), 'site_id'),
|
||||||
)
|
)
|
||||||
|
|
||||||
locations = Location.objects.add_related_count(
|
|
||||||
Location.objects.all(),
|
|
||||||
Rack,
|
|
||||||
'location',
|
|
||||||
'rack_count',
|
|
||||||
cumulative=True
|
|
||||||
)
|
|
||||||
locations = Location.objects.add_related_count(
|
|
||||||
locations,
|
|
||||||
Device,
|
|
||||||
'location',
|
|
||||||
'device_count',
|
|
||||||
cumulative=True
|
|
||||||
).restrict(request.user, 'view').filter(site=instance)
|
|
||||||
|
|
||||||
nonracked_devices = Device.objects.filter(
|
nonracked_devices = Device.objects.filter(
|
||||||
site=instance,
|
site=instance,
|
||||||
rack__isnull=True,
|
rack__isnull=True,
|
||||||
@ -400,7 +385,6 @@ class SiteView(generic.ObjectView):
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
'related_models': related_models,
|
'related_models': related_models,
|
||||||
'locations': locations,
|
|
||||||
'nonracked_devices': nonracked_devices.order_by('-pk')[:10],
|
'nonracked_devices': nonracked_devices.order_by('-pk')[:10],
|
||||||
'total_nonracked_devices_count': nonracked_devices.count(),
|
'total_nonracked_devices_count': nonracked_devices.count(),
|
||||||
}
|
}
|
||||||
|
@ -4,50 +4,10 @@
|
|||||||
<h5 class="card-header">
|
<h5 class="card-header">
|
||||||
Non-Racked Devices
|
Non-Racked Devices
|
||||||
</h5>
|
</h5>
|
||||||
<div class="card-body">
|
<div class="card-body htmx-container table-responsive"
|
||||||
{% if nonracked_devices %}
|
hx-get="{% url 'dcim:device_list' %}?site_id={{ object.pk }}&rack_id=null&parent_bay_id=null"
|
||||||
<table class="table table-hover">
|
hx-trigger="load"
|
||||||
<tr>
|
></div>
|
||||||
<th>Name</th>
|
|
||||||
<th>Role</th>
|
|
||||||
<th>Type</th>
|
|
||||||
<th colspan="2">Parent Device</th>
|
|
||||||
</tr>
|
|
||||||
{% for device in nonracked_devices %}
|
|
||||||
<tr{% if device.device_type.u_height %} class="warning"{% endif %}>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'dcim:device' pk=device.pk %}">{{ device }}</a>
|
|
||||||
</td>
|
|
||||||
<td>{{ device.device_role }}</td>
|
|
||||||
<td>{{ device.device_type }}</td>
|
|
||||||
{% if device.parent_bay %}
|
|
||||||
<td>{{ device.parent_bay.device|linkify }}</td>
|
|
||||||
<td>{{ device.parent_bay }}</td>
|
|
||||||
{% else %}
|
|
||||||
<td colspan="2" class="text-muted">—</td>
|
|
||||||
{% endif %}
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
{% if total_nonracked_devices_count > nonracked_devices.count %}
|
|
||||||
{% if object|meta:'verbose_name' == 'site' %}
|
|
||||||
<div class="text-muted">
|
|
||||||
Displaying {{ nonracked_devices.count }} of {{ total_nonracked_devices_count }} devices (<a href="{% url 'dcim:device_list' %}?site_id={{ object.pk }}&rack_id=null">View full list</a>)
|
|
||||||
</div>
|
|
||||||
{% elif object|meta:'verbose_name' == 'location' %}
|
|
||||||
<div class="text-muted">
|
|
||||||
Displaying {{ nonracked_devices.count }} of {{ total_nonracked_devices_count }} devices (<a href="{% url 'dcim:device_list' %}?location_id={{ object.pk }}&rack_id=null">View full list</a>)
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% else %}
|
|
||||||
<div class="text-muted">
|
|
||||||
None
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if perms.dcim.add_device %}
|
{% if perms.dcim.add_device %}
|
||||||
{% if object|meta:'verbose_name' == 'rack' %}
|
{% if object|meta:'verbose_name' == 'rack' %}
|
||||||
@ -73,4 +33,4 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -132,55 +132,26 @@
|
|||||||
<div class="col col-md-6">
|
<div class="col col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' with filter_name='site_id' %}
|
{% include 'inc/panels/related_objects.html' with filter_name='site_id' %}
|
||||||
{% include 'inc/panels/contacts.html' %}
|
{% include 'inc/panels/contacts.html' %}
|
||||||
<div class="card">
|
|
||||||
<h5 class="card-header">Locations</h5>
|
|
||||||
<div class='card-body'>
|
|
||||||
{% if locations %}
|
|
||||||
<table class="table table-hover">
|
|
||||||
<tr>
|
|
||||||
<th>Location</th>
|
|
||||||
<th>Racks</th>
|
|
||||||
<th>Devices</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
{% for location in locations %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
{% for i in location.level|as_range %}<i class="mdi mdi-circle-small"></i>{% endfor %}
|
|
||||||
{{ location|linkify }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'dcim:rack_list' %}?location_id={{ location.pk }}">{{ location.rack_count }}</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'dcim:device_list' %}?location_id={{ location.pk }}">{{ location.device_count }}</a>
|
|
||||||
</td>
|
|
||||||
<td class="text-end noprint">
|
|
||||||
<a href="{% url 'dcim:rack_elevation_list' %}?location_id={{ location.pk }}" class="btn btn-sm btn-primary" title="View Elevations">
|
|
||||||
<i class="mdi mdi-server"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% else %}
|
|
||||||
<span class="text-muted">None</span>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
{% if perms.dcim.add_location %}
|
|
||||||
<div class="card-footer text-end noprint">
|
|
||||||
<a href="{% url 'dcim:location_add' %}?site={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-primary btn-sm">
|
|
||||||
<i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add a location
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
{% include 'inc/panels/image_attachments.html' %}
|
{% include 'inc/panels/image_attachments.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col col-md-12">
|
<div class="col col-md-12">
|
||||||
|
<div class="card">
|
||||||
|
<h5 class="card-header">Locations</h5>
|
||||||
|
<div class="card-body htmx-container table-responsive"
|
||||||
|
hx-get="{% url 'dcim:location_list' %}?site_id={{ object.pk }}"
|
||||||
|
hx-trigger="load"
|
||||||
|
></div>
|
||||||
|
{% if perms.dcim.add_location %}
|
||||||
|
<div class="card-footer text-end noprint">
|
||||||
|
<a href="{% url 'dcim:location_add' %}?site={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-primary btn-sm">
|
||||||
|
<i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add a location
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
{% include 'dcim/inc/nonracked_devices.html' %}
|
{% include 'dcim/inc/nonracked_devices.html' %}
|
||||||
{% plugin_full_width_page object %}
|
{% plugin_full_width_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user