mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 01:48:38 -06:00
Added image attachments to sites and devices
This commit is contained in:
parent
b643939cc4
commit
50d7fd776f
@ -254,6 +254,7 @@ class Site(CreatedUpdatedModel, CustomFieldModel):
|
|||||||
contact_email = models.EmailField(blank=True, verbose_name="Contact E-mail")
|
contact_email = models.EmailField(blank=True, verbose_name="Contact E-mail")
|
||||||
comments = models.TextField(blank=True)
|
comments = models.TextField(blank=True)
|
||||||
custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
|
custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
|
||||||
|
images = GenericRelation(ImageAttachment)
|
||||||
|
|
||||||
objects = SiteManager()
|
objects = SiteManager()
|
||||||
|
|
||||||
@ -933,6 +934,7 @@ class Device(CreatedUpdatedModel, CustomFieldModel):
|
|||||||
blank=True, null=True, verbose_name='Primary IPv6')
|
blank=True, null=True, verbose_name='Primary IPv6')
|
||||||
comments = models.TextField(blank=True)
|
comments = models.TextField(blank=True)
|
||||||
custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
|
custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
|
||||||
|
images = GenericRelation(ImageAttachment)
|
||||||
|
|
||||||
objects = DeviceManager()
|
objects = DeviceManager()
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ from ipam.views import ServiceEditView
|
|||||||
from secrets.views import secret_add
|
from secrets.views import secret_add
|
||||||
|
|
||||||
from extras.views import ImageAttachmentEditView
|
from extras.views import ImageAttachmentEditView
|
||||||
from .models import Rack
|
from .models import Device, Rack, Site
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
@ -24,6 +24,7 @@ urlpatterns = [
|
|||||||
url(r'^sites/(?P<slug>[\w-]+)/$', views.site, name='site'),
|
url(r'^sites/(?P<slug>[\w-]+)/$', views.site, name='site'),
|
||||||
url(r'^sites/(?P<slug>[\w-]+)/edit/$', views.SiteEditView.as_view(), name='site_edit'),
|
url(r'^sites/(?P<slug>[\w-]+)/edit/$', views.SiteEditView.as_view(), name='site_edit'),
|
||||||
url(r'^sites/(?P<slug>[\w-]+)/delete/$', views.SiteDeleteView.as_view(), name='site_delete'),
|
url(r'^sites/(?P<slug>[\w-]+)/delete/$', views.SiteDeleteView.as_view(), name='site_delete'),
|
||||||
|
url(r'^sites/(?P<object_id>\d+)/images/add/$', ImageAttachmentEditView.as_view(), name='site_add_image', kwargs={'model': Site}),
|
||||||
|
|
||||||
# Rack groups
|
# Rack groups
|
||||||
url(r'^rack-groups/$', views.RackGroupListView.as_view(), name='rackgroup_list'),
|
url(r'^rack-groups/$', views.RackGroupListView.as_view(), name='rackgroup_list'),
|
||||||
@ -120,6 +121,7 @@ urlpatterns = [
|
|||||||
url(r'^devices/(?P<pk>\d+)/ip-addresses/assign/$', views.ipaddress_assign, name='ipaddress_assign'),
|
url(r'^devices/(?P<pk>\d+)/ip-addresses/assign/$', views.ipaddress_assign, name='ipaddress_assign'),
|
||||||
url(r'^devices/(?P<pk>\d+)/add-secret/$', secret_add, name='device_addsecret'),
|
url(r'^devices/(?P<pk>\d+)/add-secret/$', secret_add, name='device_addsecret'),
|
||||||
url(r'^devices/(?P<device>\d+)/services/assign/$', ServiceEditView.as_view(), name='service_assign'),
|
url(r'^devices/(?P<device>\d+)/services/assign/$', ServiceEditView.as_view(), name='service_assign'),
|
||||||
|
url(r'^devices/(?P<object_id>\d+)/images/add/$', ImageAttachmentEditView.as_view(), name='device_add_image', kwargs={'model': Device}),
|
||||||
|
|
||||||
# Console ports
|
# Console ports
|
||||||
url(r'^devices/console-ports/add/$', views.DeviceBulkAddConsolePortView.as_view(), name='device_bulk_add_consoleport'),
|
url(r'^devices/console-ports/add/$', views.DeviceBulkAddConsolePortView.as_view(), name='device_bulk_add_consoleport'),
|
||||||
|
@ -326,6 +326,20 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<strong>Images</strong>
|
||||||
|
</div>
|
||||||
|
{% include 'inc/image_attachments.html' with images=device.images.all %}
|
||||||
|
{% if perms.extras.add_imageattachment %}
|
||||||
|
<div class="panel-footer text-right">
|
||||||
|
<a href="{% url 'dcim:device_add_image' object_id=device.pk %}" class="btn btn-primary btn-xs">
|
||||||
|
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
|
||||||
|
Attach an image
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<strong>Related Devices</strong>
|
<strong>Related Devices</strong>
|
||||||
|
@ -201,42 +201,7 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<strong>Images</strong>
|
<strong>Images</strong>
|
||||||
</div>
|
</div>
|
||||||
{% if rack.images.all %}
|
{% include 'inc/image_attachments.html' with images=rack.images.all %}
|
||||||
<table class="table table-hover panel-body">
|
|
||||||
<tr>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Size</th>
|
|
||||||
<th>Created</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
{% for attachment in rack.images.all %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<i class="fa fa-image"></i>
|
|
||||||
<a href="{{ attachment.image.url }}" target="_blank">{{ attachment }}</a>
|
|
||||||
</td>
|
|
||||||
<td>{{ attachment.image.size|filesizeformat }}</td>
|
|
||||||
<td>{{ attachment.created }}</td>
|
|
||||||
<td class="text-right">
|
|
||||||
{% if perms.extras.change_imageattachment %}
|
|
||||||
<a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-xs" title="Edit image">
|
|
||||||
<i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if perms.extras.delete_imageattachment %}
|
|
||||||
<a href="{% url 'extras:imageattachment_delete' pk=attachment.pk %}" class="btn btn-danger btn-xs" title="Delete image">
|
|
||||||
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% else %}
|
|
||||||
<div class="panel-body">
|
|
||||||
<span class="text-muted">None</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% if perms.extras.add_imageattachment %}
|
{% if perms.extras.add_imageattachment %}
|
||||||
<div class="panel-footer text-right">
|
<div class="panel-footer text-right">
|
||||||
<a href="{% url 'dcim:rack_add_image' object_id=rack.pk %}" class="btn btn-primary btn-xs">
|
<a href="{% url 'dcim:rack_add_image' object_id=rack.pk %}" class="btn btn-primary btn-xs">
|
||||||
|
@ -235,6 +235,20 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<strong>Images</strong>
|
||||||
|
</div>
|
||||||
|
{% include 'inc/image_attachments.html' with images=site.images.all %}
|
||||||
|
{% if perms.extras.add_imageattachment %}
|
||||||
|
<div class="panel-footer text-right">
|
||||||
|
<a href="{% url 'dcim:site_add_image' object_id=site.pk %}" class="btn btn-primary btn-xs">
|
||||||
|
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
|
||||||
|
Attach an image
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<strong>Topology Maps</strong>
|
<strong>Topology Maps</strong>
|
||||||
|
36
netbox/templates/inc/image_attachments.html
Normal file
36
netbox/templates/inc/image_attachments.html
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{% if images %}
|
||||||
|
<table class="table table-hover panel-body">
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Size</th>
|
||||||
|
<th>Created</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
{% for attachment in images %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<i class="fa fa-image"></i>
|
||||||
|
<a href="{{ attachment.image.url }}" target="_blank">{{ attachment }}</a>
|
||||||
|
</td>
|
||||||
|
<td>{{ attachment.image.size|filesizeformat }}</td>
|
||||||
|
<td>{{ attachment.created }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% if perms.extras.change_imageattachment %}
|
||||||
|
<a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-xs" title="Edit image">
|
||||||
|
<i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if perms.extras.delete_imageattachment %}
|
||||||
|
<a href="{% url 'extras:imageattachment_delete' pk=attachment.pk %}" class="btn btn-danger btn-xs" title="Delete image">
|
||||||
|
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<div class="panel-body">
|
||||||
|
<span class="text-muted">None</span>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
Loading…
Reference in New Issue
Block a user