device_list.html 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. {% extends '_base.html' %}
  2. {% load helpers %}
  3. {% block content %}
  4. <div class="pull-right">
  5. {% if perms.dcim.add_device %}
  6. <a href="{% url 'dcim:device_add' %}" class="btn btn-primary">
  7. <span class="fa fa-plus" aria-hidden="true"></span>
  8. Add a device
  9. </a>
  10. <a href="{% url 'dcim:device_import' %}" class="btn btn-info">
  11. <span class="fa fa-download" aria-hidden="true"></span>
  12. Import devices
  13. </a>
  14. {% endif %}
  15. {% include 'inc/export_button.html' with obj_type='devices' %}
  16. </div>
  17. <h1>{% block title %}Devices{% endblock %}</h1>
  18. <div class="row">
  19. <div class="col-md-9">
  20. {% include 'dcim/inc/device_table.html' with bulk_edit_url='dcim:device_bulk_edit' bulk_delete_url='dcim:device_bulk_delete' %}
  21. </div>
  22. <div class="col-md-3">
  23. {% include 'inc/search_panel.html' %}
  24. </div>
  25. </div>
  26. {% endblock %}
  27. {% block javascript %}
  28. <script type="text/javascript">
  29. $(document).ready(function() {
  30. var site_list = $('#id_site');
  31. var rack_group_list = $('#id_rack_group_id');
  32. var rack_list = $('#id_rack_id');
  33. var manufacturer_list = $('#id_manufacturer_id');
  34. var model_list = $('#id_device_type_id');
  35. // Update device type options based on selected manufacturer
  36. manufacturer_list.change(function() {
  37. var selected_manufacturers = $(this).val();
  38. if (selected_manufacturers) {
  39. model_list.empty();
  40. $.ajax({
  41. url: netbox_api_path + 'dcim/device-types/?limit=500&manufacturer_id=' + selected_manufacturers.join('&manufacturer_id='),
  42. dataType: 'json',
  43. success: function (response, status) {
  44. $.each(response["results"], function (index, device_type) {
  45. var option = $("<option></option>").attr("value", device_type.id).text(device_type.model + " (" + device_type.instance_count + ")");
  46. model_list.append(option);
  47. });
  48. }
  49. });
  50. }
  51. });
  52. // Update rack group and rack options based on selected site
  53. site_list.change(function() {
  54. var selected_sites = $(this).val();
  55. if (selected_sites) {
  56. // Update rack group options
  57. rack_group_list.empty();
  58. $.ajax({
  59. url: netbox_api_path + 'dcim/rack-groups/?limit=500&site=' + selected_sites.join('&site='),
  60. dataType: 'json',
  61. success: function (response, status) {
  62. $.each(response["results"], function (index, group) {
  63. var option = $("<option></option>").attr("value", group.id).text(group.name);
  64. rack_group_list.append(option);
  65. });
  66. }
  67. });
  68. // Update rack options
  69. rack_list.empty();
  70. rack_list.append($("<option></option>").attr("value", "0").text("None"));
  71. $.ajax({
  72. url: netbox_api_path + 'dcim/racks/?limit=500&site=' + selected_sites.join('&site='),
  73. dataType: 'json',
  74. success: function (response, status) {
  75. $.each(response["results"], function (index, rack) {
  76. var option = $("<option></option>").attr("value", rack.id).text(rack.display_name);
  77. rack_list.append(option);
  78. });
  79. }
  80. });
  81. }
  82. });
  83. // Update rack options based on selected rack group
  84. rack_group_list.change(function() {
  85. var selected_rack_groups = $(this).val();
  86. if (selected_rack_groups) {
  87. rack_list.empty();
  88. $.ajax({
  89. url: netbox_api_path + 'dcim/racks/?limit=500&group_id=' + selected_rack_groups.join('&group_id='),
  90. dataType: 'json',
  91. success: function (response, status) {
  92. $.each(response["results"], function (index, rack) {
  93. var option = $("<option></option>").attr("value", rack.id).text(rack.display_name);
  94. rack_list.append(option);
  95. });
  96. }
  97. });
  98. }
  99. });
  100. });
  101. </script>
  102. {% endblock %}