nautobot 2.4.0__py3-none-any.whl → 2.4.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of nautobot might be problematic. Click here for more details.

Files changed (592) hide show
  1. nautobot/apps/__init__.py +1 -1
  2. nautobot/apps/api.py +8 -8
  3. nautobot/apps/change_logging.py +2 -2
  4. nautobot/apps/choices.py +4 -4
  5. nautobot/apps/events.py +3 -3
  6. nautobot/apps/factory.py +2 -2
  7. nautobot/apps/filters.py +1 -1
  8. nautobot/apps/forms.py +20 -20
  9. nautobot/apps/graphql.py +2 -2
  10. nautobot/apps/jobs.py +8 -8
  11. nautobot/apps/models.py +19 -19
  12. nautobot/apps/tables.py +1 -1
  13. nautobot/apps/testing.py +10 -10
  14. nautobot/apps/ui.py +2 -2
  15. nautobot/apps/utils.py +7 -7
  16. nautobot/apps/views.py +7 -7
  17. nautobot/circuits/api/serializers.py +0 -1
  18. nautobot/circuits/api/views.py +8 -4
  19. nautobot/circuits/tables.py +1 -2
  20. nautobot/circuits/templates/circuits/circuit_create.html +7 -1
  21. nautobot/circuits/views.py +3 -3
  22. nautobot/cloud/api/views.py +10 -6
  23. nautobot/cloud/models.py +1 -1
  24. nautobot/cloud/views.py +16 -0
  25. nautobot/core/api/fields.py +5 -5
  26. nautobot/core/api/filter_backends.py +9 -3
  27. nautobot/core/api/schema.py +2 -13
  28. nautobot/core/api/serializers.py +34 -40
  29. nautobot/core/api/views.py +4 -56
  30. nautobot/core/celery/log.py +4 -4
  31. nautobot/core/celery/schedulers.py +1 -1
  32. nautobot/core/choices.py +2 -2
  33. nautobot/core/events/__init__.py +3 -3
  34. nautobot/core/filters.py +16 -21
  35. nautobot/core/fixtures/user-data.json +59 -0
  36. nautobot/core/forms/__init__.py +19 -19
  37. nautobot/core/forms/fields.py +11 -14
  38. nautobot/core/forms/forms.py +2 -33
  39. nautobot/core/graphql/types.py +1 -1
  40. nautobot/core/jobs/__init__.py +7 -28
  41. nautobot/core/jobs/cleanup.py +12 -48
  42. nautobot/core/jobs/groups.py +1 -1
  43. nautobot/core/management/commands/validate_models.py +1 -1
  44. nautobot/core/models/__init__.py +1 -1
  45. nautobot/core/models/query_functions.py +2 -2
  46. nautobot/core/models/tree_queries.py +3 -6
  47. nautobot/core/settings.py +2 -29
  48. nautobot/core/settings.yaml +0 -21
  49. nautobot/core/tables.py +60 -74
  50. nautobot/core/templates/inc/media.html +0 -3
  51. nautobot/core/templates/inc/nav_menu.html +0 -1
  52. nautobot/core/templates/nautobot_config.py.j2 +0 -13
  53. nautobot/core/templates/search.html +0 -7
  54. nautobot/core/templates/utilities/render_jinja2.html +1 -1
  55. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  56. nautobot/core/templates/utilities/theme_preview.html +0 -7
  57. nautobot/core/templatetags/helpers.py +2 -11
  58. nautobot/core/testing/__init__.py +8 -8
  59. nautobot/core/testing/api.py +15 -170
  60. nautobot/core/testing/filters.py +2 -25
  61. nautobot/core/testing/forms.py +0 -2
  62. nautobot/core/testing/mixins.py +2 -7
  63. nautobot/core/testing/views.py +29 -44
  64. nautobot/core/tests/integration/test_app_home.py +1 -0
  65. nautobot/core/tests/integration/test_app_navbar.py +1 -0
  66. nautobot/core/tests/integration/test_filters.py +2 -0
  67. nautobot/core/tests/integration/test_home.py +1 -0
  68. nautobot/core/tests/integration/test_navbar.py +1 -0
  69. nautobot/core/tests/integration/test_view_authentication.py +0 -1
  70. nautobot/core/tests/runner.py +1 -1
  71. nautobot/core/tests/test_api.py +1 -98
  72. nautobot/core/tests/test_csv.py +3 -25
  73. nautobot/core/tests/test_forms.py +0 -1
  74. nautobot/core/tests/test_jobs.py +1 -303
  75. nautobot/core/tests/test_settings_schema.py +0 -7
  76. nautobot/core/tests/test_tables.py +0 -100
  77. nautobot/core/tests/test_utils.py +1 -63
  78. nautobot/core/tests/test_views.py +3 -30
  79. nautobot/core/ui/nav.py +0 -1
  80. nautobot/core/ui/object_detail.py +1 -15
  81. nautobot/core/urls.py +0 -11
  82. nautobot/core/utils/lookup.py +8 -11
  83. nautobot/core/utils/requests.py +9 -24
  84. nautobot/core/views/__init__.py +0 -42
  85. nautobot/core/views/generic.py +176 -78
  86. nautobot/core/views/mixins.py +34 -94
  87. nautobot/core/views/renderers.py +6 -6
  88. nautobot/dcim/api/serializers.py +62 -54
  89. nautobot/dcim/api/views.py +113 -47
  90. nautobot/dcim/filters/__init__.py +2 -31
  91. nautobot/dcim/forms.py +17 -36
  92. nautobot/dcim/graphql/types.py +2 -2
  93. nautobot/dcim/models/__init__.py +1 -1
  94. nautobot/dcim/models/device_component_templates.py +2 -2
  95. nautobot/dcim/models/device_components.py +20 -22
  96. nautobot/dcim/models/devices.py +1 -10
  97. nautobot/dcim/models/locations.py +3 -3
  98. nautobot/dcim/models/power.py +5 -6
  99. nautobot/dcim/models/racks.py +4 -4
  100. nautobot/dcim/tables/__init__.py +3 -3
  101. nautobot/dcim/tables/devices.py +5 -7
  102. nautobot/dcim/tables/devicetypes.py +2 -2
  103. nautobot/dcim/tables/racks.py +1 -1
  104. nautobot/dcim/templates/dcim/controller_create.html +7 -1
  105. nautobot/dcim/templates/dcim/controller_retrieve.html +9 -1
  106. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +0 -2
  107. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -5
  108. nautobot/dcim/templates/dcim/device.html +9 -1
  109. nautobot/dcim/templates/dcim/device_edit.html +37 -36
  110. nautobot/dcim/templates/dcim/location.html +9 -1
  111. nautobot/dcim/templates/dcim/location_edit.html +7 -1
  112. nautobot/dcim/templates/dcim/rack.html +9 -1
  113. nautobot/dcim/templates/dcim/rack_edit.html +7 -1
  114. nautobot/dcim/templates/dcim/rackreservation.html +9 -1
  115. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +9 -1
  116. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +7 -1
  117. nautobot/dcim/tests/test_api.py +3 -16
  118. nautobot/dcim/tests/test_filters.py +0 -33
  119. nautobot/dcim/tests/test_forms.py +2 -51
  120. nautobot/dcim/tests/test_graphql.py +0 -52
  121. nautobot/dcim/tests/test_models.py +5 -34
  122. nautobot/dcim/tests/test_views.py +83 -21
  123. nautobot/dcim/views.py +13 -1
  124. nautobot/extras/api/customfields.py +2 -2
  125. nautobot/extras/api/serializers.py +85 -90
  126. nautobot/extras/api/views.py +27 -22
  127. nautobot/extras/constants.py +0 -2
  128. nautobot/extras/filters/__init__.py +6 -8
  129. nautobot/extras/forms/base.py +2 -2
  130. nautobot/extras/forms/forms.py +31 -139
  131. nautobot/extras/forms/mixins.py +5 -13
  132. nautobot/extras/group_sync.py +3 -3
  133. nautobot/extras/health_checks.py +2 -1
  134. nautobot/extras/jobs.py +12 -70
  135. nautobot/extras/managers.py +1 -3
  136. nautobot/extras/migrations/0018_joblog_data_migration.py +9 -7
  137. nautobot/extras/models/__init__.py +1 -1
  138. nautobot/extras/models/contacts.py +1 -1
  139. nautobot/extras/models/customfields.py +11 -12
  140. nautobot/extras/models/groups.py +9 -11
  141. nautobot/extras/models/jobs.py +4 -23
  142. nautobot/extras/models/models.py +2 -2
  143. nautobot/extras/plugins/__init__.py +2 -13
  144. nautobot/extras/plugins/marketplace_manifest.yml +79 -84
  145. nautobot/extras/plugins/tables.py +14 -16
  146. nautobot/extras/plugins/views.py +69 -65
  147. nautobot/extras/registry.py +1 -1
  148. nautobot/extras/secrets/__init__.py +2 -2
  149. nautobot/extras/tables.py +5 -7
  150. nautobot/extras/templates/extras/dynamicgroup.html +9 -1
  151. nautobot/extras/templates/extras/job_detail.html +0 -16
  152. nautobot/extras/templates/extras/job_edit.html +0 -1
  153. nautobot/extras/templates/extras/jobqueue_retrieve.html +9 -1
  154. nautobot/extras/templates/extras/marketplace.html +11 -29
  155. nautobot/extras/templates/extras/plugin_detail.html +15 -32
  156. nautobot/extras/templates/extras/plugins_tiles.html +10 -21
  157. nautobot/extras/test_jobs/api_test_job.py +1 -1
  158. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  159. nautobot/extras/test_jobs/dry_run.py +1 -1
  160. nautobot/extras/test_jobs/fail.py +5 -5
  161. nautobot/extras/test_jobs/file_output.py +1 -1
  162. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  163. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  164. nautobot/extras/test_jobs/ipaddress_vars.py +1 -3
  165. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  166. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  167. nautobot/extras/test_jobs/log_redaction.py +1 -1
  168. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  169. nautobot/extras/test_jobs/modify_db.py +1 -1
  170. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  171. nautobot/extras/test_jobs/object_var_required.py +1 -1
  172. nautobot/extras/test_jobs/object_vars.py +1 -1
  173. nautobot/extras/test_jobs/pass.py +3 -3
  174. nautobot/extras/test_jobs/profiling.py +1 -1
  175. nautobot/extras/test_jobs/relative_import.py +3 -3
  176. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  177. nautobot/extras/test_jobs/task_queues.py +1 -1
  178. nautobot/extras/tests/integration/test_plugin_banner.py +2 -0
  179. nautobot/extras/tests/test_api.py +13 -13
  180. nautobot/extras/tests/test_customfields.py +1 -1
  181. nautobot/extras/tests/test_datasources.py +1 -2
  182. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  183. nautobot/extras/tests/test_filters.py +6 -6
  184. nautobot/extras/tests/test_forms.py +1 -20
  185. nautobot/extras/tests/test_jobs.py +19 -160
  186. nautobot/extras/tests/test_models.py +10 -10
  187. nautobot/extras/tests/test_plugins.py +9 -62
  188. nautobot/extras/tests/test_relationships.py +9 -120
  189. nautobot/extras/tests/test_views.py +191 -52
  190. nautobot/extras/utils.py +2 -3
  191. nautobot/extras/views.py +98 -30
  192. nautobot/ipam/api/fields.py +3 -3
  193. nautobot/ipam/api/serializers.py +33 -41
  194. nautobot/ipam/api/views.py +117 -68
  195. nautobot/ipam/factory.py +1 -1
  196. nautobot/ipam/filters.py +2 -3
  197. nautobot/ipam/lookups.py +62 -101
  198. nautobot/ipam/models.py +16 -66
  199. nautobot/ipam/querysets.py +2 -2
  200. nautobot/ipam/tables.py +7 -23
  201. nautobot/ipam/templates/ipam/ipaddress.html +9 -1
  202. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +7 -1
  203. nautobot/ipam/templates/ipam/ipaddress_edit.html +7 -1
  204. nautobot/ipam/templates/ipam/prefix.html +9 -1
  205. nautobot/ipam/templates/ipam/prefix_edit.html +7 -1
  206. nautobot/ipam/templates/ipam/vlan.html +9 -1
  207. nautobot/ipam/templates/ipam/vlan_edit.html +7 -1
  208. nautobot/ipam/templates/ipam/vrf_edit.html +7 -1
  209. nautobot/ipam/tests/test_api.py +3 -416
  210. nautobot/ipam/tests/test_forms.py +47 -49
  211. nautobot/ipam/tests/test_migrations.py +30 -30
  212. nautobot/ipam/tests/test_models.py +34 -95
  213. nautobot/ipam/tests/test_querysets.py +1 -63
  214. nautobot/ipam/tests/test_views.py +0 -3
  215. nautobot/ipam/utils/__init__.py +6 -36
  216. nautobot/ipam/views.py +87 -61
  217. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  218. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  219. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +2 -40
  220. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  221. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  222. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  223. nautobot/project-static/docs/404.html +4 -46
  224. nautobot/project-static/docs/apps/index.html +4 -46
  225. nautobot/project-static/docs/apps/nautobot-apps.html +6 -47
  226. nautobot/project-static/docs/assets/_mkdocstrings.css +1 -25
  227. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js → bundle.83f73b43.min.js} +2 -2
  228. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js.map → bundle.83f73b43.min.js.map} +2 -2
  229. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -62
  230. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +7 -59
  231. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +122 -374
  232. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +18 -90
  233. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +21 -95
  234. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +6 -53
  235. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +5 -52
  236. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +17 -79
  237. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +28 -102
  238. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +21 -108
  239. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +38 -131
  240. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +65 -239
  241. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +165 -581
  242. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +36 -109
  243. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +167 -453
  244. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +211 -493
  245. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +8 -60
  246. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +15 -71
  247. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +55 -407
  248. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +205 -585
  249. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +412 -858
  250. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +7 -59
  251. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +186 -448
  252. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +147 -365
  253. nautobot/project-static/docs/development/apps/api/configuration-view.html +4 -46
  254. nautobot/project-static/docs/development/apps/api/database-backend-config.html +4 -46
  255. nautobot/project-static/docs/development/apps/api/models/django-admin.html +4 -46
  256. nautobot/project-static/docs/development/apps/api/models/global-search.html +4 -46
  257. nautobot/project-static/docs/development/apps/api/models/graphql.html +4 -46
  258. nautobot/project-static/docs/development/apps/api/models/index.html +4 -46
  259. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +4 -46
  260. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +4 -46
  261. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +4 -46
  262. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +4 -46
  263. nautobot/project-static/docs/development/apps/api/platform-features/index.html +4 -46
  264. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +4 -46
  265. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +4 -46
  266. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +4 -46
  267. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +4 -46
  268. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +7 -68
  269. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +4 -46
  270. nautobot/project-static/docs/development/apps/api/prometheus.html +4 -46
  271. nautobot/project-static/docs/development/apps/api/setup.html +4 -46
  272. nautobot/project-static/docs/development/apps/api/testing.html +4 -46
  273. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +4 -46
  274. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +4 -46
  275. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +4 -46
  276. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +4 -46
  277. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +4 -46
  278. nautobot/project-static/docs/development/apps/api/views/base-template.html +4 -46
  279. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +4 -46
  280. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +4 -46
  281. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +4 -46
  282. nautobot/project-static/docs/development/apps/api/views/index.html +4 -46
  283. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +4 -46
  284. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +4 -46
  285. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +4 -46
  286. nautobot/project-static/docs/development/apps/api/views/notes.html +4 -46
  287. nautobot/project-static/docs/development/apps/api/views/rest-api.html +6 -52
  288. nautobot/project-static/docs/development/apps/api/views/urls.html +4 -46
  289. nautobot/project-static/docs/development/apps/index.html +4 -46
  290. nautobot/project-static/docs/development/apps/migration/code-updates.html +4 -46
  291. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +4 -46
  292. nautobot/project-static/docs/development/apps/migration/from-v1.html +4 -46
  293. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +4 -46
  294. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +4 -46
  295. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +4 -46
  296. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +4 -46
  297. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +8 -50
  298. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +4 -46
  299. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +14 -211
  300. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +4 -46
  301. nautobot/project-static/docs/development/apps/porting-from-netbox.html +4 -46
  302. nautobot/project-static/docs/development/core/application-registry.html +4 -46
  303. nautobot/project-static/docs/development/core/best-practices.html +4 -46
  304. nautobot/project-static/docs/development/core/bootstrap-ui.html +4 -46
  305. nautobot/project-static/docs/development/core/caching.html +4 -46
  306. nautobot/project-static/docs/development/core/controllers.html +4 -46
  307. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +74 -73
  308. nautobot/project-static/docs/development/core/generic-views.html +4 -46
  309. nautobot/project-static/docs/development/core/getting-started.html +224 -249
  310. nautobot/project-static/docs/development/core/homepage.html +7 -49
  311. nautobot/project-static/docs/development/core/index.html +4 -46
  312. nautobot/project-static/docs/development/core/{minikube-dev-environment-for-k8s-jobs.html → local-k8s.html} +168 -469
  313. nautobot/project-static/docs/development/core/model-checklist.html +12 -56
  314. nautobot/project-static/docs/development/core/model-features.html +4 -46
  315. nautobot/project-static/docs/development/core/natural-keys.html +4 -46
  316. nautobot/project-static/docs/development/core/navigation-menu.html +4 -46
  317. nautobot/project-static/docs/development/core/release-checklist.html +7 -49
  318. nautobot/project-static/docs/development/core/role-internals.html +4 -46
  319. nautobot/project-static/docs/development/core/settings.html +4 -46
  320. nautobot/project-static/docs/development/core/style-guide.html +7 -49
  321. nautobot/project-static/docs/development/core/templates.html +4 -46
  322. nautobot/project-static/docs/development/core/testing.html +4 -46
  323. nautobot/project-static/docs/development/core/ui-component-framework.html +273 -369
  324. nautobot/project-static/docs/development/core/user-preferences.html +4 -46
  325. nautobot/project-static/docs/development/index.html +4 -46
  326. nautobot/project-static/docs/development/jobs/index.html +122 -216
  327. nautobot/project-static/docs/development/jobs/migration/from-v1.html +4 -46
  328. nautobot/project-static/docs/index.html +23 -54
  329. nautobot/project-static/docs/objects.inv +0 -0
  330. nautobot/project-static/docs/overview/application_stack.html +7 -47
  331. nautobot/project-static/docs/overview/design_philosophy.html +4 -46
  332. nautobot/project-static/docs/release-notes/index.html +12 -52
  333. nautobot/project-static/docs/release-notes/version-1.0.html +193 -234
  334. nautobot/project-static/docs/release-notes/version-1.1.html +190 -231
  335. nautobot/project-static/docs/release-notes/version-1.2.html +265 -306
  336. nautobot/project-static/docs/release-notes/version-1.3.html +291 -332
  337. nautobot/project-static/docs/release-notes/version-1.4.html +377 -417
  338. nautobot/project-static/docs/release-notes/version-1.5.html +566 -605
  339. nautobot/project-static/docs/release-notes/version-1.6.html +447 -904
  340. nautobot/project-static/docs/release-notes/version-2.0.html +489 -528
  341. nautobot/project-static/docs/release-notes/version-2.1.html +324 -363
  342. nautobot/project-static/docs/release-notes/version-2.2.html +317 -356
  343. nautobot/project-static/docs/release-notes/version-2.3.html +352 -997
  344. nautobot/project-static/docs/release-notes/version-2.4.html +101 -417
  345. nautobot/project-static/docs/requirements.txt +2 -2
  346. nautobot/project-static/docs/search/search_index.json +1 -1
  347. nautobot/project-static/docs/sitemap.xml +287 -295
  348. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  349. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +4 -46
  350. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
  351. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +6 -48
  352. nautobot/project-static/docs/user-guide/administration/configuration/index.html +4 -46
  353. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +4 -46
  354. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +8 -110
  355. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +4 -46
  356. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +4 -46
  357. nautobot/project-static/docs/user-guide/administration/guides/docker.html +4 -46
  358. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +4 -46
  359. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +4 -46
  360. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -46
  361. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +4 -46
  362. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +4 -46
  363. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +6 -48
  364. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +4 -46
  365. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +4 -46
  366. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +4 -46
  367. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +8 -66
  368. nautobot/project-static/docs/user-guide/administration/installation/index.html +4 -46
  369. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +5 -47
  370. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +4 -46
  371. nautobot/project-static/docs/user-guide/administration/installation/services.html +4 -46
  372. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +4 -46
  373. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +4 -46
  374. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +4 -46
  375. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +4 -46
  376. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +4 -46
  377. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +4 -46
  378. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +4 -46
  379. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +4 -46
  380. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +4 -46
  381. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +8 -49
  382. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +4 -46
  383. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +4 -46
  384. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +4 -46
  385. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +4 -46
  386. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +4 -46
  387. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +4 -46
  388. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +4 -46
  389. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +4 -46
  390. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +4 -46
  391. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +4 -46
  392. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +4 -46
  393. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +4 -46
  394. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +4 -46
  395. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +4 -46
  396. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +4 -46
  397. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +4 -46
  398. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +4 -46
  399. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +4 -46
  400. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +4 -46
  401. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +4 -46
  402. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +4 -46
  403. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +4 -46
  404. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +4 -46
  405. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +4 -46
  406. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +4 -46
  407. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +4 -46
  408. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +4 -46
  409. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +4 -46
  410. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +4 -46
  411. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +4 -46
  412. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +4 -46
  413. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +4 -46
  414. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +4 -46
  415. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +4 -46
  416. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +4 -46
  417. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +4 -46
  418. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +4 -46
  419. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +4 -46
  420. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +4 -46
  421. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +4 -46
  422. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +4 -46
  423. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +4 -46
  424. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +4 -46
  425. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +4 -46
  426. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +4 -46
  427. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +4 -46
  428. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +4 -46
  429. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +4 -46
  430. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +4 -46
  431. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +4 -46
  432. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +4 -46
  433. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +4 -46
  434. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +4 -46
  435. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -46
  436. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +4 -46
  437. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +4 -46
  438. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +4 -46
  439. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +12 -50
  440. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +4 -46
  441. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +4 -46
  442. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +4 -46
  443. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +4 -46
  444. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +4 -46
  445. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +4 -46
  446. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +4 -46
  447. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +4 -46
  448. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +4 -46
  449. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +4 -46
  450. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +4 -46
  451. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +4 -46
  452. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +7 -49
  453. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +4 -46
  454. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +4 -46
  455. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +4 -46
  456. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +4 -46
  457. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +4 -46
  458. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +4 -46
  459. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +4 -46
  460. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +4 -46
  461. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +4 -46
  462. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +4 -46
  463. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +4 -46
  464. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +4 -46
  465. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +4 -46
  466. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +4 -46
  467. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +4 -46
  468. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +4 -46
  469. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +4 -46
  470. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -46
  471. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +4 -46
  472. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +4 -46
  473. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +4 -46
  474. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +4 -46
  475. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +7 -51
  476. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +4 -46
  477. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +4 -46
  478. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +4 -46
  479. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +7 -49
  480. nautobot/project-static/docs/user-guide/index.html +4 -46
  481. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +4 -46
  482. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +8 -50
  483. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +4 -46
  484. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +4 -46
  485. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +4 -46
  486. nautobot/project-static/docs/user-guide/platform-functionality/events.html +4 -46
  487. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +4 -46
  488. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +4 -46
  489. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +4 -46
  490. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +4 -46
  491. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +4 -46
  492. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +4 -46
  493. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +7 -50
  494. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +4 -46
  495. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +7 -49
  496. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +4 -46
  497. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +4 -46
  498. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +4 -46
  499. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +4 -46
  500. nautobot/project-static/docs/user-guide/platform-functionality/note.html +4 -46
  501. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +4 -46
  502. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +5 -47
  503. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +4 -46
  504. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +4 -46
  505. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +25 -94
  506. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +5 -74
  507. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +4 -46
  508. nautobot/project-static/docs/user-guide/platform-functionality/role.html +4 -46
  509. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +4 -46
  510. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +4 -46
  511. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +4 -46
  512. nautobot/project-static/docs/user-guide/platform-functionality/status.html +4 -46
  513. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +4 -46
  514. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +4 -46
  515. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +4 -46
  516. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +4 -46
  517. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +4 -46
  518. nautobot/project-static/js/forms.js +1 -1
  519. nautobot/tenancy/api/views.py +13 -9
  520. nautobot/tenancy/views.py +2 -4
  521. nautobot/users/admin.py +1 -1
  522. nautobot/users/api/serializers.py +4 -5
  523. nautobot/users/api/views.py +3 -3
  524. nautobot/virtualization/api/serializers.py +4 -4
  525. nautobot/virtualization/api/views.py +24 -5
  526. nautobot/virtualization/filters.py +3 -20
  527. nautobot/virtualization/models.py +1 -1
  528. nautobot/virtualization/tables.py +2 -2
  529. nautobot/virtualization/templates/virtualization/cluster_edit.html +7 -1
  530. nautobot/virtualization/templates/virtualization/virtualmachine.html +9 -1
  531. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +8 -2
  532. nautobot/virtualization/tests/test_filters.py +0 -17
  533. nautobot/wireless/filters.py +2 -2
  534. nautobot/wireless/forms.py +1 -1
  535. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +9 -1
  536. nautobot/wireless/tests/test_filters.py +1 -29
  537. nautobot/wireless/views.py +10 -0
  538. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/METADATA +6 -6
  539. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/RECORD +543 -591
  540. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/WHEEL +1 -1
  541. nautobot/core/api/constants.py +0 -11
  542. nautobot/core/jobs/bulk_actions.py +0 -248
  543. nautobot/core/templates/about.html +0 -67
  544. nautobot/core/templates/inc/tenancy_form_panel.html +0 -9
  545. nautobot/core/templates/inc/tenant_table_row.html +0 -11
  546. nautobot/core/utils/querysets.py +0 -64
  547. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +0 -25
  548. nautobot/dcim/tests/integration/test_controller.py +0 -62
  549. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +0 -71
  550. nautobot/dcim/tests/test_jobs.py +0 -118
  551. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +0 -22
  552. nautobot/extras/migrations/0121_alter_team_contacts.py +0 -17
  553. nautobot/extras/test_jobs/singleton.py +0 -16
  554. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  555. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  556. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  557. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  558. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  559. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  560. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  561. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  562. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  563. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  564. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  565. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  566. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  567. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  568. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  569. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  570. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  571. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  572. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  573. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  574. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  575. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  576. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  577. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  578. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  579. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  580. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  581. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  582. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  583. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  584. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  585. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  586. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +0 -9444
  587. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +0 -9722
  588. nautobot/wireless/tests/integration/__init__.py +0 -0
  589. nautobot/wireless/tests/integration/test_radio_profile.py +0 -42
  590. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/LICENSE.txt +0 -0
  591. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/NOTICE +0 -0
  592. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
  <link rel="icon" href="../../assets/favicon.ico">
21
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.46">
22
22
 
23
23
 
24
24
 
@@ -95,7 +95,7 @@
95
95
  <div data-md-component="skip">
96
96
 
97
97
 
98
- <a href="#nautobot-ui-component-framework" class="md-skip">
98
+ <a href="#nautobot-ui-framework" class="md-skip">
99
99
  Skip to content
100
100
  </a>
101
101
 
@@ -2112,27 +2112,6 @@
2112
2112
 
2113
2113
 
2114
2114
 
2115
-
2116
-
2117
-
2118
-
2119
-
2120
-
2121
- <li class="md-nav__item">
2122
- <a href="../../user-guide/feature-guides/wireless-networks-and-controllers.html" class="md-nav__link">
2123
-
2124
-
2125
- <span class="md-ellipsis">
2126
- Wireless Networks and Controllers
2127
- </span>
2128
-
2129
-
2130
- </a>
2131
- </li>
2132
-
2133
-
2134
-
2135
-
2136
2115
  </ul>
2137
2116
  </nav>
2138
2117
 
@@ -5152,27 +5131,6 @@
5152
5131
 
5153
5132
 
5154
5133
 
5155
- <li class="md-nav__item">
5156
- <a href="../../user-guide/platform-functionality/jobs/kubernetes-job-support.html" class="md-nav__link">
5157
-
5158
-
5159
- <span class="md-ellipsis">
5160
- Kubernetes Job Support
5161
- </span>
5162
-
5163
-
5164
- </a>
5165
- </li>
5166
-
5167
-
5168
-
5169
-
5170
-
5171
-
5172
-
5173
-
5174
-
5175
-
5176
5134
  <li class="md-nav__item">
5177
5135
  <a href="../../user-guide/platform-functionality/jobs/jobbutton.html" class="md-nav__link">
5178
5136
 
@@ -8104,11 +8062,11 @@
8104
8062
 
8105
8063
 
8106
8064
  <li class="md-nav__item">
8107
- <a href="minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link">
8065
+ <a href="local-k8s.html" class="md-nav__link">
8108
8066
 
8109
8067
 
8110
8068
  <span class="md-ellipsis">
8111
- Minikube Dev Environment for K8s Jobs
8069
+ Local Kubernetes Cluster
8112
8070
  </span>
8113
8071
 
8114
8072
 
@@ -8460,21 +8418,6 @@
8460
8418
  </span>
8461
8419
  </a>
8462
8420
 
8463
- <nav class="md-nav" aria-label="Buttons">
8464
- <ul class="md-nav__list">
8465
-
8466
- <li class="md-nav__item">
8467
- <a href="#buttons-example" class="md-nav__link">
8468
- <span class="md-ellipsis">
8469
- Buttons Example
8470
- </span>
8471
- </a>
8472
-
8473
- </li>
8474
-
8475
- </ul>
8476
- </nav>
8477
-
8478
8421
  </li>
8479
8422
 
8480
8423
  </ul>
@@ -9759,21 +9702,6 @@
9759
9702
  </span>
9760
9703
  </a>
9761
9704
 
9762
- <nav class="md-nav" aria-label="Buttons">
9763
- <ul class="md-nav__list">
9764
-
9765
- <li class="md-nav__item">
9766
- <a href="#buttons-example" class="md-nav__link">
9767
- <span class="md-ellipsis">
9768
- Buttons Example
9769
- </span>
9770
- </a>
9771
-
9772
- </li>
9773
-
9774
- </ul>
9775
- </nav>
9776
-
9777
9705
  </li>
9778
9706
 
9779
9707
  </ul>
@@ -10270,7 +10198,7 @@
10270
10198
 
10271
10199
 
10272
10200
 
10273
- <h1 id="nautobot-ui-component-framework">Nautobot UI Component Framework<a class="headerlink" href="#nautobot-ui-component-framework" title="Permanent link">&para;</a></h1>
10201
+ <h1 id="nautobot-ui-framework">Nautobot UI Framework<a class="headerlink" href="#nautobot-ui-framework" title="Permanent link">&para;</a></h1>
10274
10202
  <h2 id="table-of-contents">Table of Contents<a class="headerlink" href="#table-of-contents" title="Permanent link">&para;</a></h2>
10275
10203
  <ul>
10276
10204
  <li><a href="#introduction">Introduction</a></li>
@@ -10285,12 +10213,14 @@
10285
10213
  </ul>
10286
10214
  <h2 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permanent link">&para;</a></h2>
10287
10215
  <p>The Nautobot UI Framework revolutionizes how you create object detail views in your applications. Instead of writing HTML templates, you declaratively define your UI structure using Python objects, resulting in consistent, maintainable, and responsive interfaces.</p>
10288
- <!-- pyml disable-num-lines 5 no-inline-html -->
10216
+ <!-- markdownlint-disable no-inline-html -->
10289
10217
  <div class="grid cards example-images">
10290
10218
  <ul>
10291
10219
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/ui-framework-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="UI Framework Example" class="on-glb" src="../../media/development/core/ui-component-framework/ui-framework-example.png" /></a></li>
10292
10220
  </ul>
10293
10221
  </div>
10222
+ <!-- markdownlint-enable no-inline-html -->
10223
+
10294
10224
  <h3 id="why-use-the-ui-framework">Why Use the UI Framework?<a class="headerlink" href="#why-use-the-ui-framework" title="Permanent link">&para;</a></h3>
10295
10225
  <ul>
10296
10226
  <li>✨ <strong>Reduced Development Time</strong>: Eliminate boilerplate HTML/CSS</li>
@@ -10332,61 +10262,41 @@
10332
10262
  <p>A <code>Tab</code> is one of the major building blocks of your UI. The user can toggle between tabs, each of which displays distinct page content, typically consisting of one or more <code>Panel</code>s. Multiple tabs can be rendered in a single HTML response (for example, the "main" and "advanced" tabs are both part of the same page; toggling between them is a client-side action only and does not require Nautobot to reload or re-render the page), while to optimize performance, certain other tabs may correspond to distinct <code>View</code>s that are retrieved and rendered on request. The UI Framework supports both patterns.</p>
10333
10263
  <h3 id="panels">Panels<a class="headerlink" href="#panels" title="Permanent link">&para;</a></h3>
10334
10264
  <p><code>Panel</code>s are another of the major building blocks of your UI. They contain specific types of content and can be positioned within sections within a Tab.</p>
10335
- <!-- pyml disable-num-lines 5 no-inline-html -->
10265
+ <!-- markdownlint-disable no-inline-html -->
10336
10266
  <div class="grid cards example-images">
10337
10267
  <ul>
10338
10268
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/basic-panel-layout.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="Basic Panel Layout" class="on-glb" src="../../media/development/core/ui-component-framework/basic-panel-layout.png" /></a></li>
10339
10269
  </ul>
10340
10270
  </div>
10271
+ <!-- markdownlint-enable no-inline-html -->
10272
+
10341
10273
  <h3 id="buttons">Buttons<a class="headerlink" href="#buttons" title="Permanent link">&para;</a></h3>
10342
10274
  <p><code>Button</code>s are the third major building block for the UI. Defining <code>extra_buttons</code> on your <code>ObjectDetailContent</code> instance allows you to add buttons that appear at the top of the page, alongside the standard "actions" dropdown and any custom buttons added by Apps. These buttons may operate as simple hyperlinks, or may use JavaScript to provide more advanced functionality.</p>
10343
- <h4 id="buttons-example">Buttons Example<a class="headerlink" href="#buttons-example" title="Permanent link">&para;</a></h4>
10344
- <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectDetailContent</span><span class="p">,</span> <span class="n">Button</span>
10345
- <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
10346
- <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
10347
- <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span><span class="o">...</span><span class="p">],</span>
10348
- <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
10349
- <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a> <span class="n">Button</span><span class="p">(</span>
10350
- <a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10351
- <a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Check Secret&quot;</span><span class="p">,</span>
10352
- <a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-test-tube&quot;</span><span class="p">,</span>
10353
- <a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a> <span class="n">javascript_template_path</span><span class="o">=</span><span class="s2">&quot;extras/secret_check.js&quot;</span><span class="p">,</span>
10354
- <a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a> <span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;onClick&quot;</span><span class="p">:</span> <span class="s2">&quot;checkSecret()&quot;</span><span class="p">},</span>
10355
- <a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a> <span class="p">),</span>
10356
- <a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a> <span class="p">],</span>
10357
- <a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a> <span class="p">)</span>
10358
- </code></pre></div>
10359
- <!-- pyml disable-num-lines 5 no-inline-html -->
10360
- <div class="grid cards example-images">
10361
- <ul>
10362
- <li><a class="glightbox" href="../../media/development/core/ui-component-framework/buttons-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="Buttons Example" class="on-glb" src="../../media/development/core/ui-component-framework/buttons-example.png" /></a></li>
10363
- </ul>
10364
- </div>
10365
10275
  <h2 id="panel-types">Panel Types<a class="headerlink" href="#panel-types" title="Permanent link">&para;</a></h2>
10366
10276
  <h3 id="base-panel">Base Panel<a class="headerlink" href="#base-panel" title="Permanent link">&para;</a></h3>
10367
10277
  <p>The Panel component serves as a base class for creating individual display panels within a Layout system. You'll rarely use it directly, but it's important to understand as the base class for the more feature-filled subclasses described below.</p>
10368
10278
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Panel">Code reference</a></p>
10369
10279
  <h4 id="panel-examples">Panel Examples<a class="headerlink" href="#panel-examples" title="Permanent link">&para;</a></h4>
10280
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Panel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10281
+ <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
10282
+ <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="n">Panel</span><span class="p">(</span>
10283
+ <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10284
+ <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10285
+ <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Panel Header&quot;</span><span class="p">,</span>
10286
+ <a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="p">)</span>
10287
+ </code></pre></div>
10370
10288
  <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Panel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10371
10289
  <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
10372
10290
  <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="n">Panel</span><span class="p">(</span>
10373
- <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10374
- <a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10375
- <a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Panel Header&quot;</span><span class="p">,</span>
10376
- <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="p">)</span>
10377
- </code></pre></div>
10378
- <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Panel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10379
- <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>
10380
- <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="n">Panel</span><span class="p">(</span>
10381
- <a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10382
- <a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10383
- <a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Optional Params Included&quot;</span><span class="p">,</span>
10384
- <a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_content_template.html&quot;</span><span class="p">,</span>
10385
- <a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a> <span class="n">header_extra_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/header_extra_content_template.html&quot;</span><span class="p">,</span>
10386
- <a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a> <span class="n">footer_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/footer_content_template.html&quot;</span><span class="p">,</span>
10387
- <a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a> <span class="n">template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/template.html&quot;</span><span class="p">,</span>
10388
- <a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_wrapper_template.html&quot;</span><span class="p">,</span>
10389
- <a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="p">)</span>
10291
+ <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10292
+ <a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10293
+ <a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Optional Params Included&quot;</span><span class="p">,</span>
10294
+ <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_content_template.html&quot;</span><span class="p">,</span>
10295
+ <a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> <span class="n">header_extra_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/header_extra_content_template.html&quot;</span><span class="p">,</span>
10296
+ <a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a> <span class="n">footer_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/footer_content_template.html&quot;</span><span class="p">,</span>
10297
+ <a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a> <span class="n">template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/template.html&quot;</span><span class="p">,</span>
10298
+ <a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_wrapper_template.html&quot;</span><span class="p">,</span>
10299
+ <a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a><span class="p">)</span>
10390
10300
  </code></pre></div>
10391
10301
  <h3 id="objectfieldspanel">ObjectFieldsPanel<a class="headerlink" href="#objectfieldspanel" title="Permanent link">&para;</a></h3>
10392
10302
  <p><code>ObjectFieldsPanel</code> is designed to automatically render object attributes in a table format. It's particularly useful for displaying model instances or any object with defined attributes. This panel inherits from <code>KeyValueTablePanel</code>.</p>
@@ -10399,39 +10309,38 @@
10399
10309
  - `comments`, `tags` (these are automatically added as standalone panels)
10400
10310
  </code></pre></div>
10401
10311
  <h4 id="objectfieldspanel-examples">ObjectFieldsPanel Examples<a class="headerlink" href="#objectfieldspanel-examples" title="Permanent link">&para;</a></h4>
10312
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectFieldsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10313
+ <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>
10314
+ <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
10315
+ <a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10316
+ <a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
10317
+ <a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Object Fields Panel&quot;</span><span class="p">,</span>
10318
+ <a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
10319
+ <a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a><span class="p">)</span>
10320
+ </code></pre></div>
10402
10321
  <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectFieldsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10403
10322
  <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>
10404
10323
  <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
10405
- <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10324
+ <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10406
10325
  <a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
10407
10326
  <a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Object Fields Panel&quot;</span><span class="p">,</span>
10408
- <a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
10409
- <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="p">)</span>
10327
+ <a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a> <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;status&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">,</span> <span class="s2">&quot;notes&quot;</span><span class="p">],</span>
10328
+ <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
10329
+ <a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a> <span class="n">ignore_nonexistent_fields</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10330
+ <a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
10331
+ <a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a> <span class="s2">&quot;status&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">status_to_badge</span><span class="p">],</span>
10332
+ <a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a> <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">type_to_link</span><span class="p">]</span>
10333
+ <a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a> <span class="p">},</span>
10334
+ <a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a><span class="p">)</span>
10410
10335
  </code></pre></div>
10411
- <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">ui</span>
10412
- <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="kn">from</span> <span class="nn">nautobot.core.templatetags</span> <span class="kn">import</span> <span class="n">helpers</span>
10413
- <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>
10414
- <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>
10415
- <a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="n">panels</span> <span class="o">=</span> <span class="n">ui</span><span class="o">.</span><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
10416
- <a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10417
- <a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a> <span class="n">section</span><span class="o">=</span><span class="n">ui</span><span class="o">.</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
10418
- <a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Object Fields Panel&quot;</span><span class="p">,</span>
10419
- <a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a> <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;number&quot;</span><span class="p">,</span> <span class="s2">&quot;notes&quot;</span><span class="p">,</span> <span class="s2">&quot;notexists&quot;</span><span class="p">],</span>
10420
- <a id="__codelineno-5-10" name="__codelineno-5-10" href="#__codelineno-5-10"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
10421
- <a id="__codelineno-5-11" name="__codelineno-5-11" href="#__codelineno-5-11"></a> <span class="n">ignore_nonexistent_fields</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10422
- <a id="__codelineno-5-12" name="__codelineno-5-12" href="#__codelineno-5-12"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
10423
- <a id="__codelineno-5-13" name="__codelineno-5-13" href="#__codelineno-5-13"></a> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">helpers</span><span class="o">.</span><span class="n">bettertitle</span><span class="p">],</span>
10424
- <a id="__codelineno-5-14" name="__codelineno-5-14" href="#__codelineno-5-14"></a> <span class="s2">&quot;number&quot;</span><span class="p">:</span> <span class="p">[</span><span class="k">lambda</span> <span class="n">v</span><span class="p">:</span> <span class="n">helpers</span><span class="o">.</span><span class="n">hyperlinked_field</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">&quot;https://nautobot.com&quot;</span><span class="p">)]</span>
10425
- <a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a> <span class="p">},</span>
10426
- <a id="__codelineno-5-16" name="__codelineno-5-16" href="#__codelineno-5-16"></a><span class="p">),</span>
10427
- </code></pre></div>
10428
- <!-- pyml disable-num-lines 5 no-inline-html -->
10336
+ <!-- markdownlint-disable no-inline-html -->
10429
10337
  <div class="grid cards example-images">
10430
10338
  <ul>
10431
10339
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/object-fields-panel-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="ObjectFieldsPanel Example" class="on-glb" src="../../media/development/core/ui-component-framework/object-fields-panel-example.png" /></a></li>
10432
- <li><a class="glightbox" href="../../media/development/core/ui-component-framework/object-fields-panel-example_2.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="ObjectFieldsPanel Example" class="on-glb" src="../../media/development/core/ui-component-framework/object-fields-panel-example_2.png" /></a></li>
10433
10340
  </ul>
10434
10341
  </div>
10342
+ <!-- markdownlint-enable no-inline-html -->
10343
+
10435
10344
  <h3 id="keyvaluetablepanel">KeyValueTablePanel<a class="headerlink" href="#keyvaluetablepanel" title="Permanent link">&para;</a></h3>
10436
10345
  <p><code>KeyValueTablePanel</code> is a Panel component that displays data in a two-column table format, commonly used in object detail views. It extends the base <code>Panel</code> class and provides additional functionality for data display and transformation.</p>
10437
10346
  <div class="admonition tip">
@@ -10440,65 +10349,65 @@
10440
10349
  </div>
10441
10350
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.KeyValueTablePanel">Code reference</a></p>
10442
10351
  <h4 id="keyvaluetablepanel-examples">KeyValueTablePanel Examples<a class="headerlink" href="#keyvaluetablepanel-examples" title="Permanent link">&para;</a></h4>
10352
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">KeyValueTablePanel</span>
10353
+ <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>
10354
+ <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
10355
+ <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10356
+ <a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
10357
+ <a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="s2">&quot;1000000&quot;</span><span class="p">,</span>
10358
+ <a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span>
10359
+ <a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a> <span class="p">},</span>
10360
+ <a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a><span class="p">)</span>
10361
+ </code></pre></div>
10443
10362
  <div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">KeyValueTablePanel</span>
10444
10363
  <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>
10445
10364
  <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
10446
10365
  <a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10447
10366
  <a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
10448
10367
  <a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="s2">&quot;1000000&quot;</span><span class="p">,</span>
10449
- <a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span>
10368
+ <a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span><span class="p">,</span>
10450
10369
  <a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a> <span class="p">},</span>
10451
- <a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="p">)</span>
10452
- </code></pre></div>
10453
- <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">KeyValueTablePanel</span>
10454
- <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>
10455
- <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
10456
- <a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10457
- <a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
10458
- <a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="s2">&quot;1000000&quot;</span><span class="p">,</span>
10459
- <a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span><span class="p">,</span>
10460
- <a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a> <span class="p">},</span>
10461
- <a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a> <span class="n">hide_if_unset</span><span class="o">=</span><span class="p">(),</span>
10462
- <a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
10463
- <a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="c1"># List of functions to apply in order</span>
10464
- <a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a> <span class="n">humanize_speed</span><span class="p">,</span> <span class="c1"># Convert 1000000 to &quot;1 Gbps&quot;</span>
10465
- <a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
10466
- <a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a> <span class="p">],</span>
10467
- <a id="__codelineno-7-15" name="__codelineno-7-15" href="#__codelineno-7-15"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="p">[</span>
10468
- <a id="__codelineno-7-16" name="__codelineno-7-16" href="#__codelineno-7-16"></a> <span class="n">render_markdown</span><span class="p">,</span> <span class="c1"># Convert markdown to HTML</span>
10469
- <a id="__codelineno-7-17" name="__codelineno-7-17" href="#__codelineno-7-17"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
10470
- <a id="__codelineno-7-18" name="__codelineno-7-18" href="#__codelineno-7-18"></a> <span class="p">]</span>
10471
- <a id="__codelineno-7-19" name="__codelineno-7-19" href="#__codelineno-7-19"></a> <span class="p">},</span>
10472
- <a id="__codelineno-7-20" name="__codelineno-7-20" href="#__codelineno-7-20"></a><span class="p">)</span>
10370
+ <a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a> <span class="n">hide_if_unset</span><span class="o">=</span><span class="p">(),</span>
10371
+ <a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
10372
+ <a id="__codelineno-6-11" name="__codelineno-6-11" href="#__codelineno-6-11"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="c1"># List of functions to apply in order</span>
10373
+ <a id="__codelineno-6-12" name="__codelineno-6-12" href="#__codelineno-6-12"></a> <span class="n">humanize_speed</span><span class="p">,</span> <span class="c1"># Convert 1000000 to &quot;1 Gbps&quot;</span>
10374
+ <a id="__codelineno-6-13" name="__codelineno-6-13" href="#__codelineno-6-13"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
10375
+ <a id="__codelineno-6-14" name="__codelineno-6-14" href="#__codelineno-6-14"></a> <span class="p">],</span>
10376
+ <a id="__codelineno-6-15" name="__codelineno-6-15" href="#__codelineno-6-15"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="p">[</span>
10377
+ <a id="__codelineno-6-16" name="__codelineno-6-16" href="#__codelineno-6-16"></a> <span class="n">render_markdown</span><span class="p">,</span> <span class="c1"># Convert markdown to HTML</span>
10378
+ <a id="__codelineno-6-17" name="__codelineno-6-17" href="#__codelineno-6-17"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
10379
+ <a id="__codelineno-6-18" name="__codelineno-6-18" href="#__codelineno-6-18"></a> <span class="p">]</span>
10380
+ <a id="__codelineno-6-19" name="__codelineno-6-19" href="#__codelineno-6-19"></a> <span class="p">},</span>
10381
+ <a id="__codelineno-6-20" name="__codelineno-6-20" href="#__codelineno-6-20"></a><span class="p">)</span>
10473
10382
  </code></pre></div>
10474
10383
  <h3 id="groupedkeyvaluetablepanel">GroupedKeyValueTablePanel<a class="headerlink" href="#groupedkeyvaluetablepanel" title="Permanent link">&para;</a></h3>
10475
10384
  <p><code>GroupedKeyValueTablePanel</code> is a specialized version of <code>KeyValueTablePanel</code> that organizes data into collapsible accordion groups. This is used in the standard template for displaying grouped custom/computed fields when present.</p>
10476
10385
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.GroupedKeyValueTablePanel">Code reference</a></p>
10477
10386
  <h4 id="groupedkeyvaluetablepanel-examples">GroupedKeyValueTablePanel Examples<a class="headerlink" href="#groupedkeyvaluetablepanel-examples" title="Permanent link">&para;</a></h4>
10478
- <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">GroupedKeyValueTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10479
- <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
10480
- <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
10481
- <a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
10482
- <a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10483
- <a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Grouped Information&quot;</span><span class="p">,</span>
10484
- <a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;network-details&quot;</span><span class="p">,</span>
10485
- <a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a> <span class="c1"># Data Structure</span>
10486
- <a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
10487
- <a id="__codelineno-8-10" name="__codelineno-8-10" href="#__codelineno-8-10"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Group name (shown as accordion header)</span>
10488
- <a id="__codelineno-8-11" name="__codelineno-8-11" href="#__codelineno-8-11"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span> <span class="c1"># Key-value pairs in this group</span>
10489
- <a id="__codelineno-8-12" name="__codelineno-8-12" href="#__codelineno-8-12"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
10490
- <a id="__codelineno-8-13" name="__codelineno-8-13" href="#__codelineno-8-13"></a> <span class="p">},</span>
10491
- <a id="__codelineno-8-14" name="__codelineno-8-14" href="#__codelineno-8-14"></a> <span class="s2">&quot;Physical&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Another group</span>
10492
- <a id="__codelineno-8-15" name="__codelineno-8-15" href="#__codelineno-8-15"></a> <span class="s2">&quot;Location&quot;</span><span class="p">:</span> <span class="s2">&quot;Rack A1&quot;</span><span class="p">,</span>
10493
- <a id="__codelineno-8-16" name="__codelineno-8-16" href="#__codelineno-8-16"></a> <span class="s2">&quot;Height&quot;</span><span class="p">:</span> <span class="s2">&quot;2U&quot;</span>
10494
- <a id="__codelineno-8-17" name="__codelineno-8-17" href="#__codelineno-8-17"></a> <span class="p">},</span>
10495
- <a id="__codelineno-8-18" name="__codelineno-8-18" href="#__codelineno-8-18"></a> <span class="s2">&quot;&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Empty string for ungrouped items</span>
10496
- <a id="__codelineno-8-19" name="__codelineno-8-19" href="#__codelineno-8-19"></a> <span class="s2">&quot;Notes&quot;</span><span class="p">:</span> <span class="s2">&quot;Important info&quot;</span>
10497
- <a id="__codelineno-8-20" name="__codelineno-8-20" href="#__codelineno-8-20"></a> <span class="p">}</span>
10498
- <a id="__codelineno-8-21" name="__codelineno-8-21" href="#__codelineno-8-21"></a> <span class="p">},</span>
10499
- <a id="__codelineno-8-22" name="__codelineno-8-22" href="#__codelineno-8-22"></a><span class="p">)</span>
10387
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">GroupedKeyValueTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10388
+ <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>
10389
+ <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
10390
+ <a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
10391
+ <a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10392
+ <a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Grouped Information&quot;</span><span class="p">,</span>
10393
+ <a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;network-details&quot;</span><span class="p">,</span>
10394
+ <a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a> <span class="c1"># Data Structure</span>
10395
+ <a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
10396
+ <a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Group name (shown as accordion header)</span>
10397
+ <a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span> <span class="c1"># Key-value pairs in this group</span>
10398
+ <a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
10399
+ <a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a> <span class="p">},</span>
10400
+ <a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a> <span class="s2">&quot;Physical&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Another group</span>
10401
+ <a id="__codelineno-7-15" name="__codelineno-7-15" href="#__codelineno-7-15"></a> <span class="s2">&quot;Location&quot;</span><span class="p">:</span> <span class="s2">&quot;Rack A1&quot;</span><span class="p">,</span>
10402
+ <a id="__codelineno-7-16" name="__codelineno-7-16" href="#__codelineno-7-16"></a> <span class="s2">&quot;Height&quot;</span><span class="p">:</span> <span class="s2">&quot;2U&quot;</span>
10403
+ <a id="__codelineno-7-17" name="__codelineno-7-17" href="#__codelineno-7-17"></a> <span class="p">},</span>
10404
+ <a id="__codelineno-7-18" name="__codelineno-7-18" href="#__codelineno-7-18"></a> <span class="s2">&quot;&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Empty string for ungrouped items</span>
10405
+ <a id="__codelineno-7-19" name="__codelineno-7-19" href="#__codelineno-7-19"></a> <span class="s2">&quot;Notes&quot;</span><span class="p">:</span> <span class="s2">&quot;Important info&quot;</span>
10406
+ <a id="__codelineno-7-20" name="__codelineno-7-20" href="#__codelineno-7-20"></a> <span class="p">}</span>
10407
+ <a id="__codelineno-7-21" name="__codelineno-7-21" href="#__codelineno-7-21"></a> <span class="p">},</span>
10408
+ <a id="__codelineno-7-22" name="__codelineno-7-22" href="#__codelineno-7-22"></a><span class="p">)</span>
10500
10409
  </code></pre></div>
10501
- <!-- pyml disable-num-lines 7 no-inline-html -->
10410
+ <!-- markdownlint-disable no-inline-html -->
10502
10411
  <div class="grid cards example-images">
10503
10412
  <ul>
10504
10413
  <li>
@@ -10509,99 +10418,104 @@
10509
10418
  </li>
10510
10419
  </ul>
10511
10420
  </div>
10421
+ <!-- markdownlint-enable no-inline-html -->
10422
+
10512
10423
  <h3 id="statspanel">StatsPanel<a class="headerlink" href="#statspanel" title="Permanent link">&para;</a></h3>
10513
10424
  <p><code>StatsPanel</code> is a Panel component that displays statistical information with clickable links to filtered views of related models. It's particularly useful for dashboards and summary views that provide quick access to filtered data sets.</p>
10514
10425
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.StatsPanel">Code reference</a></p>
10515
10426
  <h4 id="statspanel-examples">StatsPanel Examples<a class="headerlink" href="#statspanel-examples" title="Permanent link">&para;</a></h4>
10516
- <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">StatsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10517
- <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
10518
- <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="n">StatsPanel</span><span class="p">(</span>
10519
- <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">700</span><span class="p">,</span>
10520
- <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10521
- <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Statistics&quot;</span><span class="p">,</span>
10522
- <a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
10523
- <a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span> <span class="c1"># Models to show statistics for</span>
10524
- <a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a> <span class="n">Device</span><span class="p">,</span> <span class="c1"># Direct model reference</span>
10525
- <a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a> <span class="c1"># Will count all devices related to this object by their `location` key</span>
10526
- <a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">),</span>
10527
- <a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a> <span class="c1"># Tuple of (Model, query_string)</span>
10528
- <a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a> <span class="c1"># For complex relationships</span>
10529
- <a id="__codelineno-9-14" name="__codelineno-9-14" href="#__codelineno-9-14"></a> <span class="p">(</span><span class="n">VirtualMachine</span><span class="p">,</span> <span class="s2">&quot;cluster__location__in&quot;</span><span class="p">)</span>
10530
- <a id="__codelineno-9-15" name="__codelineno-9-15" href="#__codelineno-9-15"></a> <span class="c1"># Another complex relationship example</span>
10531
- <a id="__codelineno-9-16" name="__codelineno-9-16" href="#__codelineno-9-16"></a> <span class="p">],</span>
10532
- <a id="__codelineno-9-17" name="__codelineno-9-17" href="#__codelineno-9-17"></a><span class="p">)</span>
10427
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">StatsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10428
+ <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
10429
+ <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="n">StatsPanel</span><span class="p">(</span>
10430
+ <a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">700</span><span class="p">,</span>
10431
+ <a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10432
+ <a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Statistics&quot;</span><span class="p">,</span>
10433
+ <a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
10434
+ <a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span> <span class="c1"># Models to show statistics for</span>
10435
+ <a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a> <span class="n">Device</span><span class="p">,</span> <span class="c1"># Direct model reference</span>
10436
+ <a id="__codelineno-8-10" name="__codelineno-8-10" href="#__codelineno-8-10"></a> <span class="c1"># Will count all devices related to this object by their `location` key</span>
10437
+ <a id="__codelineno-8-11" name="__codelineno-8-11" href="#__codelineno-8-11"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">),</span>
10438
+ <a id="__codelineno-8-12" name="__codelineno-8-12" href="#__codelineno-8-12"></a> <span class="c1"># Tuple of (Model, query_string)</span>
10439
+ <a id="__codelineno-8-13" name="__codelineno-8-13" href="#__codelineno-8-13"></a> <span class="c1"># For complex relationships</span>
10440
+ <a id="__codelineno-8-14" name="__codelineno-8-14" href="#__codelineno-8-14"></a> <span class="p">(</span><span class="n">VirtualMachine</span><span class="p">,</span> <span class="s2">&quot;cluster__location__in&quot;</span><span class="p">)</span>
10441
+ <a id="__codelineno-8-15" name="__codelineno-8-15" href="#__codelineno-8-15"></a> <span class="c1"># Another complex relationship example</span>
10442
+ <a id="__codelineno-8-16" name="__codelineno-8-16" href="#__codelineno-8-16"></a> <span class="p">],</span>
10443
+ <a id="__codelineno-8-17" name="__codelineno-8-17" href="#__codelineno-8-17"></a><span class="p">)</span>
10533
10444
  </code></pre></div>
10534
- <!-- pyml disable-num-lines 5 no-inline-html -->
10445
+ <!-- markdownlint-disable no-inline-html -->
10535
10446
  <div class="grid cards example-images">
10536
10447
  <ul>
10537
- <li><a class="glightbox" href="../../media/development/core/ui-component-framework/stats-panel-example-code.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="StatsPanel Code Example" class="on-glb" src="../../media/development/core/ui-component-framework/stats-panel-example-code.png" /></a></li>
10538
10448
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/stats-panel-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="StatsPanel Example" class="on-glb" src="../../media/development/core/ui-component-framework/stats-panel-example.png" /></a></li>
10539
10449
  </ul>
10540
10450
  </div>
10451
+ <!-- markdownlint-enable no-inline-html -->
10452
+
10541
10453
  <h3 id="basetextpanel">BaseTextPanel<a class="headerlink" href="#basetextpanel" title="Permanent link">&para;</a></h3>
10542
10454
  <p><code>BaseTextPanel</code> is a specialized Panel component designed to display single values in various text formats including plaintext, JSON, YAML, Markdown, and code snippets.</p>
10543
10455
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.BaseTextPanel">Code reference</a></p>
10544
- <!-- pyml disable-num-lines 5 no-inline-html -->
10456
+ <!-- markdownlint-disable no-inline-html -->
10545
10457
  <div class="grid cards" style="width: 300px;">
10546
10458
  <ul>
10547
10459
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/text-panels-family.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="Text Panels Family" class="on-glb" src="../../media/development/core/ui-component-framework/text-panels-family.png" /></a></li>
10548
10460
  </ul>
10549
10461
  </div>
10462
+ <!-- markdownlint-enable no-inline-html -->
10463
+
10550
10464
  <h3 id="objecttextpanel">ObjectTextPanel<a class="headerlink" href="#objecttextpanel" title="Permanent link">&para;</a></h3>
10551
10465
  <p><code>ObjectTextPanel</code> renders content from a specific field of an object in the context. It simplifies the display of object attributes in various text formats (Markdown, JSON, YAML, etc.).</p>
10552
10466
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ObjectTextPanel">Code reference</a></p>
10553
10467
  <h4 id="objecttextpanel-examples">ObjectTextPanel Examples<a class="headerlink" href="#objecttextpanel-examples" title="Permanent link">&para;</a></h4>
10554
- <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectTextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10555
- <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>
10556
- <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="n">ObjectTextPanel</span><span class="p">(</span>
10557
- <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
10558
- <a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10559
- <a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Description&quot;</span><span class="p">,</span>
10560
- <a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
10561
- <a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">ObjectTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
10562
- <a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10563
- <a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a><span class="p">)</span>
10468
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectTextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10469
+ <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
10470
+ <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="n">ObjectTextPanel</span><span class="p">(</span>
10471
+ <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
10472
+ <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10473
+ <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Description&quot;</span><span class="p">,</span>
10474
+ <a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
10475
+ <a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">ObjectTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
10476
+ <a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10477
+ <a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a><span class="p">)</span>
10564
10478
  </code></pre></div>
10565
10479
  <h3 id="textpanel">TextPanel<a class="headerlink" href="#textpanel" title="Permanent link">&para;</a></h3>
10566
10480
  <p><code>TextPanel</code> renders content from a specified context field. It provides a simple way to display text content in various formats (Markdown, JSON, YAML, plaintext, or code) from the rendering context.</p>
10567
10481
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.TextPanel">Code reference</a></p>
10568
10482
  <h4 id="textpanel-examples">TextPanel Examples<a class="headerlink" href="#textpanel-examples" title="Permanent link">&para;</a></h4>
10569
- <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">TextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10570
- <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>
10571
- <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="n">TextPanel</span><span class="p">(</span>
10572
- <a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span>
10573
- <a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10574
- <a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Custom Content&quot;</span><span class="p">,</span>
10575
- <a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a> <span class="n">context_field</span><span class="o">=</span><span class="s2">&quot;text&quot;</span><span class="p">,</span>
10576
- <a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">TextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">CODE</span><span class="p">,</span>
10577
- <a id="__codelineno-11-9" name="__codelineno-11-9" href="#__codelineno-11-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10578
- <a id="__codelineno-11-10" name="__codelineno-11-10" href="#__codelineno-11-10"></a><span class="p">)</span>
10483
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">TextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10484
+ <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>
10485
+ <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="n">TextPanel</span><span class="p">(</span>
10486
+ <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span>
10487
+ <a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10488
+ <a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Custom Content&quot;</span><span class="p">,</span>
10489
+ <a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a> <span class="n">context_field</span><span class="o">=</span><span class="s2">&quot;text&quot;</span><span class="p">,</span>
10490
+ <a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">TextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">CODE</span><span class="p">,</span>
10491
+ <a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10492
+ <a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a><span class="p">)</span>
10579
10493
  </code></pre></div>
10580
10494
  <h3 id="datatablepanel">DataTablePanel<a class="headerlink" href="#datatablepanel" title="Permanent link">&para;</a></h3>
10581
10495
  <p><code>DataTablePanel</code> is a Panel component that renders tabular data directly from a list of dictionaries, providing a lightweight alternative to <code>django_tables2</code> Table classes.</p>
10582
10496
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.DataTablePanel">Code reference</a></p>
10583
10497
  <p>Note:
10584
10498
  <code>columns</code>/<code>context_columns_key</code> and <code>column_headers</code>/<code>context_column_headers_key</code> are mutually exclusive pairs.</p>
10585
- <!-- pyml disable-num-lines 5 no-inline-html -->
10499
+ <!-- markdownlint-disable no-inline-html -->
10586
10500
  <div class="grid cards example-images">
10587
10501
  <ul>
10588
10502
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/table-panels-family.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="Table Panels Family" class="on-glb" src="../../media/development/core/ui-component-framework/table-panels-family.png" /></a></li>
10589
10503
  </ul>
10590
10504
  </div>
10505
+ <!-- markdownlint-enable no-inline-html -->
10506
+
10591
10507
  <h4 id="datatablepanel-examples">DataTablePanel Examples<a class="headerlink" href="#datatablepanel-examples" title="Permanent link">&para;</a></h4>
10592
- <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">DataTablePanel</span>
10593
- <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
10594
- <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="n">DataTablePanel</span><span class="p">(</span>
10595
- <a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10596
- <a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a> <span class="n">context_data_key</span><span class="o">=</span><span class="s2">&quot;data&quot;</span><span class="p">,</span>
10597
- <a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;one&quot;</span><span class="p">,</span> <span class="s2">&quot;two&quot;</span><span class="p">,</span> <span class="s2">&quot;three&quot;</span><span class="p">],</span>
10598
- <a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a> <span class="n">column_headers</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;One&quot;</span><span class="p">,</span> <span class="s2">&quot;Two&quot;</span><span class="p">,</span> <span class="s2">&quot;Three&quot;</span><span class="p">]</span>
10599
- <a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a><span class="p">)</span>
10508
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">DataTablePanel</span>
10509
+ <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>
10510
+ <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="n">DataTablePanel</span><span class="p">(</span>
10511
+ <a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10512
+ <a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a> <span class="n">context_data_key</span><span class="o">=</span><span class="s2">&quot;data&quot;</span><span class="p">,</span>
10513
+ <a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;one&quot;</span><span class="p">,</span> <span class="s2">&quot;two&quot;</span><span class="p">,</span> <span class="s2">&quot;three&quot;</span><span class="p">],</span>
10514
+ <a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a> <span class="n">column_headers</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;One&quot;</span><span class="p">,</span> <span class="s2">&quot;Two&quot;</span><span class="p">,</span> <span class="s2">&quot;Three&quot;</span><span class="p">]</span>
10515
+ <a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a><span class="p">)</span>
10600
10516
  </code></pre></div>
10601
10517
  <h3 id="objectstablepanel">ObjectsTablePanel<a class="headerlink" href="#objectstablepanel" title="Permanent link">&para;</a></h3>
10602
- <p>The <code>ObjectsTablePanel</code> is a powerful component for rendering tables of Django model objects,
10603
- particularly suited for displaying related objects within a detail view.
10604
- It integrates with <code>django_tables2</code> and provides extensive customization options.</p>
10518
+ <p>The <code>ObjectsTablePanel</code> is a powerful component for rendering tables of Django model objects, particularly suited for displaying related objects within a detail view. It integrates with <code>django_tables2</code> and provides extensive customization options.</p>
10605
10519
  <h4 id="configuration-parameters">Configuration Parameters<a class="headerlink" href="#configuration-parameters" title="Permanent link">&para;</a></h4>
10606
10520
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ObjectsTablePanel">Code reference</a></p>
10607
10521
  <h5 id="core-configuration">Core Configuration<a class="headerlink" href="#core-configuration" title="Permanent link">&para;</a></h5>
@@ -10753,148 +10667,138 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
10753
10667
  </tbody>
10754
10668
  </table>
10755
10669
  <h4 id="objectstablepanel-examples">ObjectsTablePanel Examples<a class="headerlink" href="#objectstablepanel-examples" title="Permanent link">&para;</a></h4>
10670
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectsTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10671
+ <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
10672
+ <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
10673
+ <a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10674
+ <a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10675
+ <a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a> <span class="n">table_class</span><span class="o">=</span><span class="n">ExampleTable</span><span class="p">,</span>
10676
+ <a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a> <span class="n">table_filter</span><span class="o">=</span><span class="s2">&quot;example_name&quot;</span><span class="p">,</span>
10677
+ <a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
10678
+ <a id="__codelineno-12-9" name="__codelineno-12-9" href="#__codelineno-12-9"></a>
10679
+ <a id="__codelineno-12-10" name="__codelineno-12-10" href="#__codelineno-12-10"></a><span class="p">)</span>
10680
+ </code></pre></div>
10756
10681
  <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectsTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10757
10682
  <a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>
10758
10683
  <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
10759
- <a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10760
- <a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10761
- <a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a> <span class="n">table_class</span><span class="o">=</span><span class="n">ExampleTable</span><span class="p">,</span>
10762
- <a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></a> <span class="n">table_filter</span><span class="o">=</span><span class="s2">&quot;example_name&quot;</span><span class="p">,</span>
10763
- <a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
10764
- <a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a>
10765
- <a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a><span class="p">)</span>
10766
- </code></pre></div>
10767
- <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectsTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
10768
- <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
10769
- <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
10770
- <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10771
- <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10772
- <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> <span class="n">context_table_key</span><span class="o">=</span><span class="s2">&quot;example_table_instance&quot;</span><span class="p">,</span>
10773
- <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
10774
- <a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a> <span class="n">hide_hierarchy_ui</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10775
- <a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a> <span class="n">related_field_name</span><span class="o">=</span><span class="s2">&quot;example_id&quot;</span><span class="p">,</span>
10776
- <a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a> <span class="n">enable_bulk_actions</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10777
- <a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a> <span class="n">add_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim:add_device&quot;</span><span class="p">],</span>
10778
- <a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a> <span class="n">max_display_count</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
10779
- <a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a> <span class="n">prefetch_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;devices&quot;</span><span class="p">],</span>
10780
- <a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a> <span class="n">select_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;manufacturers&quot;</span><span class="p">,</span> <span class="s2">&quot;locations&quot;</span><span class="p">],</span>
10781
- <a id="__codelineno-14-15" name="__codelineno-14-15" href="#__codelineno-14-15"></a><span class="p">)</span>
10684
+ <a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10685
+ <a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10686
+ <a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a> <span class="n">context_table_key</span><span class="o">=</span><span class="s2">&quot;example_table_instance&quot;</span><span class="p">,</span>
10687
+ <a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
10688
+ <a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a> <span class="n">hide_hierarchy_ui</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10689
+ <a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a> <span class="n">related_field_name</span><span class="o">=</span><span class="s2">&quot;example_id&quot;</span><span class="p">,</span>
10690
+ <a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a> <span class="n">enable_bulk_actions</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
10691
+ <a id="__codelineno-13-11" name="__codelineno-13-11" href="#__codelineno-13-11"></a> <span class="n">add_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim:add_device&quot;</span><span class="p">],</span>
10692
+ <a id="__codelineno-13-12" name="__codelineno-13-12" href="#__codelineno-13-12"></a> <span class="n">max_display_count</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
10693
+ <a id="__codelineno-13-13" name="__codelineno-13-13" href="#__codelineno-13-13"></a> <span class="n">prefetch_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;devices&quot;</span><span class="p">],</span>
10694
+ <a id="__codelineno-13-14" name="__codelineno-13-14" href="#__codelineno-13-14"></a> <span class="n">select_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;manufacturers&quot;</span><span class="p">,</span> <span class="s2">&quot;locations&quot;</span><span class="p">],</span>
10695
+ <a id="__codelineno-13-15" name="__codelineno-13-15" href="#__codelineno-13-15"></a><span class="p">)</span>
10782
10696
  </code></pre></div>
10783
10697
  <h2 id="button-types">Button Types<a class="headerlink" href="#button-types" title="Permanent link">&para;</a></h2>
10784
10698
  <h3 id="button">Button<a class="headerlink" href="#button" title="Permanent link">&para;</a></h3>
10785
10699
  <p>The Button component defines a single button in an object detail view.</p>
10786
10700
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Button">Code reference</a></p>
10787
10701
  <h4 id="button-examples">Button Examples<a class="headerlink" href="#button-examples" title="Permanent link">&para;</a></h4>
10788
- <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="k">class</span> <span class="nc">SecretUIViewSet</span><span class="p">(</span><span class="o">...</span><span class="p">):</span>
10789
- <a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a> <span class="o">...</span>
10790
- <a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
10791
- <a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span><span class="o">...</span><span class="p">],</span>
10792
- <a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
10793
- <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a> <span class="n">Button</span><span class="p">(</span>
10794
- <a id="__codelineno-15-7" name="__codelineno-15-7" href="#__codelineno-15-7"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10795
- <a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Check Secret&quot;</span><span class="p">,</span>
10796
- <a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-test-tube&quot;</span><span class="p">,</span>
10797
- <a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a> <span class="n">javascript_template_path</span><span class="o">=</span><span class="s2">&quot;extras/secret_check.js&quot;</span><span class="p">,</span>
10798
- <a id="__codelineno-15-11" name="__codelineno-15-11" href="#__codelineno-15-11"></a> <span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;onClick&quot;</span><span class="p">:</span> <span class="s2">&quot;checkSecret()&quot;</span><span class="p">},</span>
10799
- <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a> <span class="p">),</span>
10800
- <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a> <span class="p">],</span>
10801
- <a id="__codelineno-15-14" name="__codelineno-15-14" href="#__codelineno-15-14"></a> <span class="p">)</span>
10702
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="k">class</span> <span class="nc">SecretUIViewSet</span><span class="p">(</span><span class="o">...</span><span class="p">):</span>
10703
+ <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a> <span class="o">...</span>
10704
+ <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
10705
+ <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span><span class="o">...</span><span class="p">],</span>
10706
+ <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
10707
+ <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> <span class="n">Button</span><span class="p">(</span>
10708
+ <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10709
+ <a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Check Secret&quot;</span><span class="p">,</span>
10710
+ <a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-test-tube&quot;</span><span class="p">,</span>
10711
+ <a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a> <span class="n">javascript_template_path</span><span class="o">=</span><span class="s2">&quot;extras/secret_check.js&quot;</span><span class="p">,</span>
10712
+ <a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a> <span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;onClick&quot;</span><span class="p">:</span> <span class="s2">&quot;checkSecret()&quot;</span><span class="p">},</span>
10713
+ <a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a> <span class="p">),</span>
10714
+ <a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a> <span class="p">],</span>
10715
+ <a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a> <span class="p">)</span>
10802
10716
  </code></pre></div>
10803
- <!-- pyml disable-num-lines 5 no-inline-html -->
10804
- <div class="grid cards example-images">
10805
- <ul>
10806
- <li><a class="glightbox" href="../../media/development/core/ui-component-framework/button-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="Button Example" class="on-glb" src="../../media/development/core/ui-component-framework/button-example.png" /></a></li>
10807
- </ul>
10808
- </div>
10717
+ <p><img alt="Button Example" src="../../media/development/core/ui-component-framework/button-example.png" /></p>
10809
10718
  <h3 id="dropdownbutton">DropdownButton<a class="headerlink" href="#dropdownbutton" title="Permanent link">&para;</a></h3>
10810
10719
  <p><code>DropdownButton</code> is a subclass of <code>Button</code> that may itself contain other <code>Buttons</code> as its <code>children</code>, which it will render as a dropdown menu. For an example of usage, refer to the <code>Add Components</code> dropdown on the Device detail view.</p>
10811
10720
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.DropdownButton">Code reference</a></p>
10812
10721
  <h4 id="dropdownbutton-examples">DropdownButton Examples<a class="headerlink" href="#dropdownbutton-examples" title="Permanent link">&para;</a></h4>
10813
- <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="k">class</span> <span class="nc">DeviceView</span><span class="p">(</span><span class="n">generic</span><span class="o">.</span><span class="n">ObjectView</span><span class="p">):</span>
10814
- <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a> <span class="o">...</span>
10815
- <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
10816
- <a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
10817
- <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">DropdownButton</span><span class="p">(</span>
10818
- <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10819
- <a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a> <span class="n">color</span><span class="o">=</span><span class="n">ButtonColorChoices</span><span class="o">.</span><span class="n">BLUE</span><span class="p">,</span>
10820
- <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Add Components&quot;</span><span class="p">,</span>
10821
- <a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-plus-thick&quot;</span><span class="p">,</span>
10822
- <a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.change_device&quot;</span><span class="p">],</span>
10823
- <a id="__codelineno-16-11" name="__codelineno-16-11" href="#__codelineno-16-11"></a> <span class="n">children</span><span class="o">=</span><span class="p">(</span>
10824
- <a id="__codelineno-16-12" name="__codelineno-16-12" href="#__codelineno-16-12"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
10825
- <a id="__codelineno-16-13" name="__codelineno-16-13" href="#__codelineno-16-13"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10826
- <a id="__codelineno-16-14" name="__codelineno-16-14" href="#__codelineno-16-14"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleports_add&quot;</span><span class="p">,</span>
10827
- <a id="__codelineno-16-15" name="__codelineno-16-15" href="#__codelineno-16-15"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Ports&quot;</span><span class="p">,</span>
10828
- <a id="__codelineno-16-16" name="__codelineno-16-16" href="#__codelineno-16-16"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console&quot;</span><span class="p">,</span>
10829
- <a id="__codelineno-16-17" name="__codelineno-16-17" href="#__codelineno-16-17"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleport&quot;</span><span class="p">],</span>
10830
- <a id="__codelineno-16-18" name="__codelineno-16-18" href="#__codelineno-16-18"></a> <span class="p">),</span>
10831
- <a id="__codelineno-16-19" name="__codelineno-16-19" href="#__codelineno-16-19"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
10832
- <a id="__codelineno-16-20" name="__codelineno-16-20" href="#__codelineno-16-20"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10833
- <a id="__codelineno-16-21" name="__codelineno-16-21" href="#__codelineno-16-21"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleserverports_add&quot;</span><span class="p">,</span>
10834
- <a id="__codelineno-16-22" name="__codelineno-16-22" href="#__codelineno-16-22"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Server Ports&quot;</span><span class="p">,</span>
10835
- <a id="__codelineno-16-23" name="__codelineno-16-23" href="#__codelineno-16-23"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console-network-outline&quot;</span><span class="p">,</span>
10836
- <a id="__codelineno-16-24" name="__codelineno-16-24" href="#__codelineno-16-24"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleserverport&quot;</span><span class="p">],</span>
10837
- <a id="__codelineno-16-25" name="__codelineno-16-25" href="#__codelineno-16-25"></a> <span class="p">),</span>
10838
- <a id="__codelineno-16-26" name="__codelineno-16-26" href="#__codelineno-16-26"></a> <span class="o">...</span>
10839
- <a id="__codelineno-16-27" name="__codelineno-16-27" href="#__codelineno-16-27"></a> <span class="p">),</span>
10840
- <a id="__codelineno-16-28" name="__codelineno-16-28" href="#__codelineno-16-28"></a> <span class="p">),</span>
10841
- <a id="__codelineno-16-29" name="__codelineno-16-29" href="#__codelineno-16-29"></a> <span class="p">],</span>
10842
- <a id="__codelineno-16-30" name="__codelineno-16-30" href="#__codelineno-16-30"></a> <span class="p">)</span>
10722
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="k">class</span> <span class="nc">DeviceView</span><span class="p">(</span><span class="n">generic</span><span class="o">.</span><span class="n">ObjectView</span><span class="p">):</span>
10723
+ <a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a> <span class="o">...</span>
10724
+ <a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
10725
+ <a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
10726
+ <a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">DropdownButton</span><span class="p">(</span>
10727
+ <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10728
+ <a id="__codelineno-15-7" name="__codelineno-15-7" href="#__codelineno-15-7"></a> <span class="n">color</span><span class="o">=</span><span class="n">ButtonColorChoices</span><span class="o">.</span><span class="n">BLUE</span><span class="p">,</span>
10729
+ <a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Add Components&quot;</span><span class="p">,</span>
10730
+ <a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-plus-thick&quot;</span><span class="p">,</span>
10731
+ <a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.change_device&quot;</span><span class="p">],</span>
10732
+ <a id="__codelineno-15-11" name="__codelineno-15-11" href="#__codelineno-15-11"></a> <span class="n">children</span><span class="o">=</span><span class="p">(</span>
10733
+ <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
10734
+ <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10735
+ <a id="__codelineno-15-14" name="__codelineno-15-14" href="#__codelineno-15-14"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleports_add&quot;</span><span class="p">,</span>
10736
+ <a id="__codelineno-15-15" name="__codelineno-15-15" href="#__codelineno-15-15"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Ports&quot;</span><span class="p">,</span>
10737
+ <a id="__codelineno-15-16" name="__codelineno-15-16" href="#__codelineno-15-16"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console&quot;</span><span class="p">,</span>
10738
+ <a id="__codelineno-15-17" name="__codelineno-15-17" href="#__codelineno-15-17"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleport&quot;</span><span class="p">],</span>
10739
+ <a id="__codelineno-15-18" name="__codelineno-15-18" href="#__codelineno-15-18"></a> <span class="p">),</span>
10740
+ <a id="__codelineno-15-19" name="__codelineno-15-19" href="#__codelineno-15-19"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
10741
+ <a id="__codelineno-15-20" name="__codelineno-15-20" href="#__codelineno-15-20"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
10742
+ <a id="__codelineno-15-21" name="__codelineno-15-21" href="#__codelineno-15-21"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleserverports_add&quot;</span><span class="p">,</span>
10743
+ <a id="__codelineno-15-22" name="__codelineno-15-22" href="#__codelineno-15-22"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Server Ports&quot;</span><span class="p">,</span>
10744
+ <a id="__codelineno-15-23" name="__codelineno-15-23" href="#__codelineno-15-23"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console-network-outline&quot;</span><span class="p">,</span>
10745
+ <a id="__codelineno-15-24" name="__codelineno-15-24" href="#__codelineno-15-24"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleserverport&quot;</span><span class="p">],</span>
10746
+ <a id="__codelineno-15-25" name="__codelineno-15-25" href="#__codelineno-15-25"></a> <span class="p">),</span>
10747
+ <a id="__codelineno-15-26" name="__codelineno-15-26" href="#__codelineno-15-26"></a> <span class="o">...</span>
10748
+ <a id="__codelineno-15-27" name="__codelineno-15-27" href="#__codelineno-15-27"></a> <span class="p">),</span>
10749
+ <a id="__codelineno-15-28" name="__codelineno-15-28" href="#__codelineno-15-28"></a> <span class="p">),</span>
10750
+ <a id="__codelineno-15-29" name="__codelineno-15-29" href="#__codelineno-15-29"></a> <span class="p">],</span>
10751
+ <a id="__codelineno-15-30" name="__codelineno-15-30" href="#__codelineno-15-30"></a> <span class="p">)</span>
10843
10752
  </code></pre></div>
10844
- <!-- pyml disable-num-lines 5 no-inline-html -->
10845
- <div class="grid cards example-images">
10846
- <ul>
10847
- <li><a class="glightbox" href="../../media/development/core/ui-component-framework/dropdown-button-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="DropdownButton Example" class="on-glb" src="../../media/development/core/ui-component-framework/dropdown-button-example.png" /></a></li>
10848
- </ul>
10849
- </div>
10753
+ <p><img alt="DropdownButton Example" src="../../media/development/core/ui-component-framework/dropdown-button-example.png" /></p>
10850
10754
  <h2 id="complete-example">Complete Example<a class="headerlink" href="#complete-example" title="Permanent link">&para;</a></h2>
10851
- <div class="highlight"><span class="filename">views.py</span><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="p">(</span>
10852
- <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a> <span class="n">SectionChoices</span><span class="p">,</span>
10853
- <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a> <span class="n">ObjectFieldsPanel</span><span class="p">,</span>
10854
- <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> <span class="n">ObjectDetailContent</span><span class="p">,</span>
10855
- <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> <span class="n">StatsPanel</span><span class="p">,</span>
10856
- <a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a><span class="p">)</span>
10857
- <a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">views</span>
10858
- <a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a><span class="kn">from</span> <span class="nn">your_app.models</span> <span class="kn">import</span> <span class="n">Location</span><span class="p">,</span> <span class="n">Device</span><span class="p">,</span> <span class="n">Circuit</span>
10859
- <a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a>
10860
- <a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a><span class="k">class</span> <span class="nc">LocationUIViewSet</span><span class="p">(</span><span class="n">views</span><span class="o">.</span><span class="n">NautobotUIViewSet</span><span class="p">):</span>
10861
- <a id="__codelineno-17-11" name="__codelineno-17-11" href="#__codelineno-17-11"></a> <span class="n">queryset</span> <span class="o">=</span> <span class="n">Location</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
10862
- <a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a>
10863
- <a id="__codelineno-17-13" name="__codelineno-17-13" href="#__codelineno-17-13"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
10864
- <a id="__codelineno-17-14" name="__codelineno-17-14" href="#__codelineno-17-14"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span>
10865
- <a id="__codelineno-17-15" name="__codelineno-17-15" href="#__codelineno-17-15"></a> <span class="n">ObjectFieldsPanel</span><span class="p">(</span>
10866
- <a id="__codelineno-17-16" name="__codelineno-17-16" href="#__codelineno-17-16"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10867
- <a id="__codelineno-17-17" name="__codelineno-17-17" href="#__codelineno-17-17"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
10868
- <a id="__codelineno-17-18" name="__codelineno-17-18" href="#__codelineno-17-18"></a> <span class="n">fields</span><span class="o">=</span><span class="s2">&quot;__all__&quot;</span><span class="p">,</span>
10869
- <a id="__codelineno-17-19" name="__codelineno-17-19" href="#__codelineno-17-19"></a> <span class="p">),</span>
10870
- <a id="__codelineno-17-20" name="__codelineno-17-20" href="#__codelineno-17-20"></a> <span class="n">StatsPanel</span><span class="p">(</span>
10871
- <a id="__codelineno-17-21" name="__codelineno-17-21" href="#__codelineno-17-21"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10872
- <a id="__codelineno-17-22" name="__codelineno-17-22" href="#__codelineno-17-22"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10873
- <a id="__codelineno-17-23" name="__codelineno-17-23" href="#__codelineno-17-23"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
10874
- <a id="__codelineno-17-24" name="__codelineno-17-24" href="#__codelineno-17-24"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span>
10875
- <a id="__codelineno-17-25" name="__codelineno-17-25" href="#__codelineno-17-25"></a> <span class="n">Device</span><span class="p">,</span>
10876
- <a id="__codelineno-17-26" name="__codelineno-17-26" href="#__codelineno-17-26"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">)</span>
10877
- <a id="__codelineno-17-27" name="__codelineno-17-27" href="#__codelineno-17-27"></a> <span class="p">],</span>
10878
- <a id="__codelineno-17-28" name="__codelineno-17-28" href="#__codelineno-17-28"></a> <span class="p">),</span>
10879
- <a id="__codelineno-17-29" name="__codelineno-17-29" href="#__codelineno-17-29"></a> <span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
10880
- <a id="__codelineno-17-30" name="__codelineno-17-30" href="#__codelineno-17-30"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
10881
- <a id="__codelineno-17-31" name="__codelineno-17-31" href="#__codelineno-17-31"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10882
- <a id="__codelineno-17-32" name="__codelineno-17-32" href="#__codelineno-17-32"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;custom-fields&quot;</span><span class="p">,</span>
10883
- <a id="__codelineno-17-33" name="__codelineno-17-33" href="#__codelineno-17-33"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
10884
- <a id="__codelineno-17-34" name="__codelineno-17-34" href="#__codelineno-17-34"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span>
10885
- <a id="__codelineno-17-35" name="__codelineno-17-35" href="#__codelineno-17-35"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span>
10886
- <a id="__codelineno-17-36" name="__codelineno-17-36" href="#__codelineno-17-36"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
10887
- <a id="__codelineno-17-37" name="__codelineno-17-37" href="#__codelineno-17-37"></a> <span class="p">}</span>
10888
- <a id="__codelineno-17-38" name="__codelineno-17-38" href="#__codelineno-17-38"></a> <span class="p">},</span>
10889
- <a id="__codelineno-17-39" name="__codelineno-17-39" href="#__codelineno-17-39"></a> <span class="p">),</span>
10890
- <a id="__codelineno-17-40" name="__codelineno-17-40" href="#__codelineno-17-40"></a> <span class="n">ObjectTextPanel</span><span class="p">(</span>
10891
- <a id="__codelineno-17-41" name="__codelineno-17-41" href="#__codelineno-17-41"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
10892
- <a id="__codelineno-17-42" name="__codelineno-17-42" href="#__codelineno-17-42"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10893
- <a id="__codelineno-17-43" name="__codelineno-17-43" href="#__codelineno-17-43"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
10894
- <a id="__codelineno-17-44" name="__codelineno-17-44" href="#__codelineno-17-44"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">BaseTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
10895
- <a id="__codelineno-17-45" name="__codelineno-17-45" href="#__codelineno-17-45"></a> <span class="p">),</span>
10896
- <a id="__codelineno-17-46" name="__codelineno-17-46" href="#__codelineno-17-46"></a> <span class="p">]</span>
10897
- <a id="__codelineno-17-47" name="__codelineno-17-47" href="#__codelineno-17-47"></a> <span class="p">)</span>
10755
+ <div class="highlight"><span class="filename">views.py</span><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="p">(</span>
10756
+ <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a> <span class="n">SectionChoices</span><span class="p">,</span>
10757
+ <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a> <span class="n">ObjectFieldsPanel</span><span class="p">,</span>
10758
+ <a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a> <span class="n">ObjectDetailContent</span><span class="p">,</span>
10759
+ <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a> <span class="n">StatsPanel</span><span class="p">,</span>
10760
+ <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a><span class="p">)</span>
10761
+ <a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">views</span>
10762
+ <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a><span class="kn">from</span> <span class="nn">your_app.models</span> <span class="kn">import</span> <span class="n">Location</span><span class="p">,</span> <span class="n">Device</span><span class="p">,</span> <span class="n">Circuit</span>
10763
+ <a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a>
10764
+ <a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a><span class="k">class</span> <span class="nc">LocationUIViewSet</span><span class="p">(</span><span class="n">views</span><span class="o">.</span><span class="n">NautobotUIViewSet</span><span class="p">):</span>
10765
+ <a id="__codelineno-16-11" name="__codelineno-16-11" href="#__codelineno-16-11"></a> <span class="n">queryset</span> <span class="o">=</span> <span class="n">Location</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
10766
+ <a id="__codelineno-16-12" name="__codelineno-16-12" href="#__codelineno-16-12"></a>
10767
+ <a id="__codelineno-16-13" name="__codelineno-16-13" href="#__codelineno-16-13"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
10768
+ <a id="__codelineno-16-14" name="__codelineno-16-14" href="#__codelineno-16-14"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span>
10769
+ <a id="__codelineno-16-15" name="__codelineno-16-15" href="#__codelineno-16-15"></a> <span class="n">ObjectFieldsPanel</span><span class="p">(</span>
10770
+ <a id="__codelineno-16-16" name="__codelineno-16-16" href="#__codelineno-16-16"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10771
+ <a id="__codelineno-16-17" name="__codelineno-16-17" href="#__codelineno-16-17"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
10772
+ <a id="__codelineno-16-18" name="__codelineno-16-18" href="#__codelineno-16-18"></a> <span class="n">fields</span><span class="o">=</span><span class="s2">&quot;__all__&quot;</span><span class="p">,</span>
10773
+ <a id="__codelineno-16-19" name="__codelineno-16-19" href="#__codelineno-16-19"></a> <span class="p">),</span>
10774
+ <a id="__codelineno-16-20" name="__codelineno-16-20" href="#__codelineno-16-20"></a> <span class="n">StatsPanel</span><span class="p">(</span>
10775
+ <a id="__codelineno-16-21" name="__codelineno-16-21" href="#__codelineno-16-21"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
10776
+ <a id="__codelineno-16-22" name="__codelineno-16-22" href="#__codelineno-16-22"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
10777
+ <a id="__codelineno-16-23" name="__codelineno-16-23" href="#__codelineno-16-23"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
10778
+ <a id="__codelineno-16-24" name="__codelineno-16-24" href="#__codelineno-16-24"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span>
10779
+ <a id="__codelineno-16-25" name="__codelineno-16-25" href="#__codelineno-16-25"></a> <span class="n">Device</span><span class="p">,</span>
10780
+ <a id="__codelineno-16-26" name="__codelineno-16-26" href="#__codelineno-16-26"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">)</span>
10781
+ <a id="__codelineno-16-27" name="__codelineno-16-27" href="#__codelineno-16-27"></a> <span class="p">],</span>
10782
+ <a id="__codelineno-16-28" name="__codelineno-16-28" href="#__codelineno-16-28"></a> <span class="p">),</span>
10783
+ <a id="__codelineno-16-29" name="__codelineno-16-29" href="#__codelineno-16-29"></a> <span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
10784
+ <a id="__codelineno-16-30" name="__codelineno-16-30" href="#__codelineno-16-30"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
10785
+ <a id="__codelineno-16-31" name="__codelineno-16-31" href="#__codelineno-16-31"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10786
+ <a id="__codelineno-16-32" name="__codelineno-16-32" href="#__codelineno-16-32"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;custom-fields&quot;</span><span class="p">,</span>
10787
+ <a id="__codelineno-16-33" name="__codelineno-16-33" href="#__codelineno-16-33"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
10788
+ <a id="__codelineno-16-34" name="__codelineno-16-34" href="#__codelineno-16-34"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span>
10789
+ <a id="__codelineno-16-35" name="__codelineno-16-35" href="#__codelineno-16-35"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span>
10790
+ <a id="__codelineno-16-36" name="__codelineno-16-36" href="#__codelineno-16-36"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
10791
+ <a id="__codelineno-16-37" name="__codelineno-16-37" href="#__codelineno-16-37"></a> <span class="p">}</span>
10792
+ <a id="__codelineno-16-38" name="__codelineno-16-38" href="#__codelineno-16-38"></a> <span class="p">},</span>
10793
+ <a id="__codelineno-16-39" name="__codelineno-16-39" href="#__codelineno-16-39"></a> <span class="p">),</span>
10794
+ <a id="__codelineno-16-40" name="__codelineno-16-40" href="#__codelineno-16-40"></a> <span class="n">ObjectTextPanel</span><span class="p">(</span>
10795
+ <a id="__codelineno-16-41" name="__codelineno-16-41" href="#__codelineno-16-41"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
10796
+ <a id="__codelineno-16-42" name="__codelineno-16-42" href="#__codelineno-16-42"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
10797
+ <a id="__codelineno-16-43" name="__codelineno-16-43" href="#__codelineno-16-43"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
10798
+ <a id="__codelineno-16-44" name="__codelineno-16-44" href="#__codelineno-16-44"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">BaseTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
10799
+ <a id="__codelineno-16-45" name="__codelineno-16-45" href="#__codelineno-16-45"></a> <span class="p">),</span>
10800
+ <a id="__codelineno-16-46" name="__codelineno-16-46" href="#__codelineno-16-46"></a> <span class="p">]</span>
10801
+ <a id="__codelineno-16-47" name="__codelineno-16-47" href="#__codelineno-16-47"></a> <span class="p">)</span>
10898
10802
  </code></pre></div>
10899
10803
  <h2 id="layouts-and-sections">Layouts and Sections<a class="headerlink" href="#layouts-and-sections" title="Permanent link">&para;</a></h2>
10900
10804
  <h3 id="render-options"><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.BaseTextPanel.RenderOptions">Render Options</a><a class="headerlink" href="#render-options" title="Permanent link">&para;</a></h3>
@@ -10927,7 +10831,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
10927
10831
  <h3 id="common-issues-and-solutions">Common Issues and Solutions<a class="headerlink" href="#common-issues-and-solutions" title="Permanent link">&para;</a></h3>
10928
10832
  <ol>
10929
10833
  <li>
10930
- <p>Panels Not Appearing</p>
10834
+ <p><strong>Panels Not Appearing</strong></p>
10931
10835
  <ul>
10932
10836
  <li>Verify section choices</li>
10933
10837
  <li>Check panel weights</li>
@@ -10935,7 +10839,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
10935
10839
  </ul>
10936
10840
  </li>
10937
10841
  <li>
10938
- <p>Performance Issues</p>
10842
+ <p><strong>Performance Issues</strong></p>
10939
10843
  <ul>
10940
10844
  <li>Review query complexity in StatsPanel</li>
10941
10845
  <li>Optimize field selections</li>
@@ -10943,7 +10847,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
10943
10847
  </ul>
10944
10848
  </li>
10945
10849
  <li>
10946
- <p>Layout Problems</p>
10850
+ <p><strong>Layout Problems</strong></p>
10947
10851
  <ul>
10948
10852
  <li>Validate section assignments</li>
10949
10853
  <li>Review weight ordering</li>
@@ -10951,7 +10855,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
10951
10855
  </ul>
10952
10856
  </li>
10953
10857
  <li>
10954
- <p>Value Rendering</p>
10858
+ <p><strong>Value Rendering</strong></p>
10955
10859
  <ul>
10956
10860
  <li>Verify transform functions</li>
10957
10861
  <li>Check data types</li>
@@ -11105,7 +11009,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
11105
11009
  <script id="__config" type="application/json">{"base": "../..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
11106
11010
 
11107
11011
 
11108
- <script src="../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
11012
+ <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script>
11109
11013
 
11110
11014
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
11111
11015