device_list.html 3.9 KB

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