nautobot 2.4.0b1__py3-none-any.whl → 2.4.2__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 (668) 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 +1 -0
  18. nautobot/circuits/api/views.py +4 -8
  19. nautobot/circuits/tables.py +2 -1
  20. nautobot/circuits/templates/circuits/circuit_create.html +1 -7
  21. nautobot/circuits/tests/integration/test_circuits_bulk_operations.py +43 -0
  22. nautobot/circuits/tests/integration/test_relationships.py +1 -1
  23. nautobot/circuits/views.py +3 -3
  24. nautobot/cloud/api/views.py +6 -10
  25. nautobot/cloud/models.py +1 -1
  26. nautobot/cloud/views.py +0 -16
  27. nautobot/core/api/constants.py +11 -0
  28. nautobot/core/api/fields.py +5 -5
  29. nautobot/core/api/filter_backends.py +3 -9
  30. nautobot/core/api/schema.py +13 -2
  31. nautobot/core/api/serializers.py +40 -34
  32. nautobot/core/api/views.py +56 -4
  33. nautobot/core/apps/__init__.py +0 -5
  34. nautobot/core/celery/log.py +4 -4
  35. nautobot/core/celery/schedulers.py +2 -2
  36. nautobot/core/choices.py +2 -2
  37. nautobot/core/events/__init__.py +3 -3
  38. nautobot/core/filters.py +67 -35
  39. nautobot/core/forms/__init__.py +19 -19
  40. nautobot/core/forms/fields.py +14 -11
  41. nautobot/core/forms/forms.py +33 -2
  42. nautobot/core/graphql/types.py +1 -1
  43. nautobot/core/jobs/__init__.py +28 -7
  44. nautobot/core/jobs/bulk_actions.py +285 -0
  45. nautobot/core/jobs/cleanup.py +48 -12
  46. nautobot/core/jobs/groups.py +1 -1
  47. nautobot/core/management/commands/validate_models.py +1 -1
  48. nautobot/core/models/__init__.py +3 -1
  49. nautobot/core/models/query_functions.py +2 -2
  50. nautobot/core/models/tree_queries.py +6 -3
  51. nautobot/core/settings.py +29 -2
  52. nautobot/core/settings.yaml +21 -0
  53. nautobot/core/tables.py +79 -61
  54. nautobot/core/templates/about.html +67 -0
  55. nautobot/core/templates/generic/object_bulk_destroy.html +1 -1
  56. nautobot/core/templates/inc/media.html +3 -0
  57. nautobot/core/templates/inc/nav_menu.html +1 -0
  58. nautobot/core/templates/inc/tenancy_form_panel.html +9 -0
  59. nautobot/core/templates/inc/tenant_table_row.html +11 -0
  60. nautobot/core/templates/nautobot_config.py.j2 +13 -0
  61. nautobot/core/templates/search.html +7 -0
  62. nautobot/core/templates/utilities/render_jinja2.html +1 -1
  63. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  64. nautobot/core/templates/utilities/theme_preview.html +7 -0
  65. nautobot/core/templatetags/helpers.py +11 -2
  66. nautobot/core/testing/__init__.py +8 -8
  67. nautobot/core/testing/api.py +170 -15
  68. nautobot/core/testing/filters.py +45 -10
  69. nautobot/core/testing/forms.py +2 -0
  70. nautobot/core/testing/integration.py +514 -5
  71. nautobot/core/testing/mixins.py +7 -2
  72. nautobot/core/testing/views.py +44 -29
  73. nautobot/core/tests/integration/test_app_home.py +0 -1
  74. nautobot/core/tests/integration/test_app_navbar.py +0 -1
  75. nautobot/core/tests/integration/test_filters.py +0 -2
  76. nautobot/core/tests/integration/test_home.py +0 -1
  77. nautobot/core/tests/integration/test_navbar.py +0 -1
  78. nautobot/core/tests/integration/test_view_authentication.py +1 -0
  79. nautobot/core/tests/runner.py +1 -1
  80. nautobot/core/tests/test_api.py +98 -1
  81. nautobot/core/tests/test_csv.py +25 -3
  82. nautobot/core/tests/test_filters.py +209 -246
  83. nautobot/core/tests/test_forms.py +1 -0
  84. nautobot/core/tests/test_jobs.py +492 -1
  85. nautobot/core/tests/test_models.py +9 -0
  86. nautobot/core/tests/test_settings_schema.py +7 -0
  87. nautobot/core/tests/test_tables.py +100 -0
  88. nautobot/core/tests/test_utils.py +63 -1
  89. nautobot/core/tests/test_views.py +30 -3
  90. nautobot/core/ui/nav.py +1 -0
  91. nautobot/core/ui/object_detail.py +15 -1
  92. nautobot/core/urls.py +11 -0
  93. nautobot/core/utils/git.py +7 -2
  94. nautobot/core/utils/lookup.py +11 -8
  95. nautobot/core/utils/querysets.py +64 -0
  96. nautobot/core/utils/requests.py +24 -9
  97. nautobot/core/views/__init__.py +42 -0
  98. nautobot/core/views/generic.py +131 -197
  99. nautobot/core/views/mixins.py +136 -41
  100. nautobot/core/views/renderers.py +6 -6
  101. nautobot/core/views/utils.py +2 -2
  102. nautobot/dcim/api/serializers.py +56 -64
  103. nautobot/dcim/api/views.py +47 -113
  104. nautobot/dcim/constants.py +6 -13
  105. nautobot/dcim/factory.py +6 -1
  106. nautobot/dcim/filters/__init__.py +31 -2
  107. nautobot/dcim/forms.py +48 -17
  108. nautobot/dcim/graphql/types.py +2 -2
  109. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +25 -0
  110. nautobot/dcim/models/__init__.py +1 -1
  111. nautobot/dcim/models/device_component_templates.py +2 -2
  112. nautobot/dcim/models/device_components.py +22 -20
  113. nautobot/dcim/models/devices.py +10 -1
  114. nautobot/dcim/models/locations.py +3 -3
  115. nautobot/dcim/models/power.py +6 -5
  116. nautobot/dcim/models/racks.py +4 -4
  117. nautobot/dcim/tables/__init__.py +3 -3
  118. nautobot/dcim/tables/devices.py +9 -6
  119. nautobot/dcim/tables/devicetypes.py +2 -2
  120. nautobot/dcim/tables/racks.py +1 -1
  121. nautobot/dcim/templates/dcim/cable.html +1 -1
  122. nautobot/dcim/templates/dcim/controller_create.html +1 -7
  123. nautobot/dcim/templates/dcim/controller_retrieve.html +1 -9
  124. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +2 -0
  125. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +5 -0
  126. nautobot/dcim/templates/dcim/device/base.html +1 -1
  127. nautobot/dcim/templates/dcim/device.html +3 -11
  128. nautobot/dcim/templates/dcim/device_component.html +1 -1
  129. nautobot/dcim/templates/dcim/device_edit.html +36 -37
  130. nautobot/dcim/templates/dcim/devicetype.html +1 -1
  131. nautobot/dcim/templates/dcim/location.html +2 -10
  132. nautobot/dcim/templates/dcim/location_edit.html +1 -7
  133. nautobot/dcim/templates/dcim/locationtype.html +1 -1
  134. nautobot/dcim/templates/dcim/locationtype_retrieve.html +1 -1
  135. nautobot/dcim/templates/dcim/manufacturer.html +1 -1
  136. nautobot/dcim/templates/dcim/platform.html +1 -1
  137. nautobot/dcim/templates/dcim/powerfeed.html +1 -1
  138. nautobot/dcim/templates/dcim/powerpanel.html +1 -1
  139. nautobot/dcim/templates/dcim/rack.html +2 -10
  140. nautobot/dcim/templates/dcim/rack_edit.html +1 -7
  141. nautobot/dcim/templates/dcim/rackgroup.html +1 -1
  142. nautobot/dcim/templates/dcim/rackreservation.html +3 -11
  143. nautobot/dcim/templates/dcim/virtualchassis.html +1 -1
  144. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -9
  145. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +1 -7
  146. nautobot/dcim/tests/integration/test_controller.py +62 -0
  147. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +71 -0
  148. nautobot/dcim/tests/integration/test_device_bulk_operations.py +30 -0
  149. nautobot/dcim/tests/integration/test_location_bulk_operations.py +43 -0
  150. nautobot/dcim/tests/test_api.py +16 -5
  151. nautobot/dcim/tests/test_filters.py +33 -0
  152. nautobot/dcim/tests/test_forms.py +51 -2
  153. nautobot/dcim/tests/test_graphql.py +52 -0
  154. nautobot/dcim/tests/test_jobs.py +118 -0
  155. nautobot/dcim/tests/test_models.py +52 -9
  156. nautobot/dcim/tests/test_views.py +30 -84
  157. nautobot/dcim/views.py +13 -28
  158. nautobot/extras/api/customfields.py +2 -2
  159. nautobot/extras/api/serializers.py +123 -85
  160. nautobot/extras/api/views.py +33 -30
  161. nautobot/extras/constants.py +3 -0
  162. nautobot/extras/datasources/git.py +125 -0
  163. nautobot/extras/filters/__init__.py +8 -6
  164. nautobot/extras/forms/base.py +2 -2
  165. nautobot/extras/forms/forms.py +139 -31
  166. nautobot/extras/forms/mixins.py +14 -6
  167. nautobot/extras/group_sync.py +3 -3
  168. nautobot/extras/health_checks.py +1 -2
  169. nautobot/extras/jobs.py +85 -18
  170. nautobot/extras/managers.py +3 -1
  171. nautobot/extras/migrations/0018_joblog_data_migration.py +7 -9
  172. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +22 -0
  173. nautobot/extras/migrations/0121_alter_team_contacts.py +17 -0
  174. nautobot/extras/migrations/0122_add_graphqlquery_owner_content_type.py +34 -0
  175. nautobot/extras/models/__init__.py +1 -1
  176. nautobot/extras/models/contacts.py +1 -1
  177. nautobot/extras/models/customfields.py +41 -23
  178. nautobot/extras/models/datasources.py +85 -0
  179. nautobot/extras/models/groups.py +11 -9
  180. nautobot/extras/models/jobs.py +23 -4
  181. nautobot/extras/models/models.py +17 -2
  182. nautobot/extras/models/relationships.py +17 -5
  183. nautobot/extras/plugins/__init__.py +13 -2
  184. nautobot/extras/plugins/marketplace_manifest.yml +84 -79
  185. nautobot/extras/plugins/tables.py +16 -14
  186. nautobot/extras/plugins/views.py +65 -69
  187. nautobot/extras/registry.py +1 -1
  188. nautobot/extras/secrets/__init__.py +2 -2
  189. nautobot/extras/signals.py +15 -1
  190. nautobot/extras/tables.py +7 -5
  191. nautobot/extras/templates/extras/computedfield.html +1 -1
  192. nautobot/extras/templates/extras/configcontext.html +1 -1
  193. nautobot/extras/templates/extras/configcontextschema.html +1 -1
  194. nautobot/extras/templates/extras/customfield.html +1 -1
  195. nautobot/extras/templates/extras/customlink.html +1 -1
  196. nautobot/extras/templates/extras/dynamicgroup.html +2 -10
  197. nautobot/extras/templates/extras/exporttemplate.html +1 -1
  198. nautobot/extras/templates/extras/gitrepository.html +1 -1
  199. nautobot/extras/templates/extras/graphqlquery.html +1 -1
  200. nautobot/extras/templates/extras/job_detail.html +17 -1
  201. nautobot/extras/templates/extras/job_edit.html +1 -0
  202. nautobot/extras/templates/extras/jobbutton_retrieve.html +1 -1
  203. nautobot/extras/templates/extras/jobhook.html +1 -1
  204. nautobot/extras/templates/extras/jobqueue_retrieve.html +1 -9
  205. nautobot/extras/templates/extras/jobresult.html +1 -1
  206. nautobot/extras/templates/extras/marketplace.html +29 -11
  207. nautobot/extras/templates/extras/objectchange.html +1 -1
  208. nautobot/extras/templates/extras/plugin_detail.html +33 -16
  209. nautobot/extras/templates/extras/plugins_tiles.html +21 -10
  210. nautobot/extras/templates/extras/relationship.html +1 -63
  211. nautobot/extras/templates/extras/role_retrieve.html +1 -1
  212. nautobot/extras/templates/extras/scheduledjob.html +1 -1
  213. nautobot/extras/templates/extras/secret.html +1 -1
  214. nautobot/extras/templates/extras/secretsgroup.html +1 -1
  215. nautobot/extras/templates/extras/status.html +1 -1
  216. nautobot/extras/templates/extras/tag.html +1 -1
  217. nautobot/extras/templates/extras/webhook.html +1 -1
  218. nautobot/extras/templatetags/job_buttons.py +4 -4
  219. nautobot/extras/test_jobs/api_test_job.py +1 -1
  220. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  221. nautobot/extras/test_jobs/dry_run.py +1 -1
  222. nautobot/extras/test_jobs/fail.py +5 -5
  223. nautobot/extras/test_jobs/file_output.py +1 -1
  224. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  225. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  226. nautobot/extras/test_jobs/ipaddress_vars.py +3 -1
  227. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  228. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  229. nautobot/extras/test_jobs/log_redaction.py +1 -1
  230. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  231. nautobot/extras/test_jobs/modify_db.py +1 -1
  232. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  233. nautobot/extras/test_jobs/object_var_required.py +1 -1
  234. nautobot/extras/test_jobs/object_vars.py +1 -1
  235. nautobot/extras/test_jobs/pass.py +3 -3
  236. nautobot/extras/test_jobs/profiling.py +1 -1
  237. nautobot/extras/test_jobs/relative_import.py +3 -3
  238. nautobot/extras/test_jobs/singleton.py +16 -0
  239. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  240. nautobot/extras/test_jobs/task_queues.py +1 -1
  241. nautobot/extras/tests/git_data/01-valid-files/graphql_queries/device_interfaces.gql +8 -0
  242. nautobot/extras/tests/git_data/01-valid-files/graphql_queries/device_names.gql +5 -0
  243. nautobot/extras/tests/git_data/02-invalid-files/graphql_queries/bad_device_names.gql +5 -0
  244. nautobot/extras/tests/git_helper.py +9 -1
  245. nautobot/extras/tests/integration/__init__.py +29 -16
  246. nautobot/extras/tests/integration/test_plugin_banner.py +0 -2
  247. nautobot/extras/tests/test_api.py +19 -13
  248. nautobot/extras/tests/test_customfields.py +50 -52
  249. nautobot/extras/tests/test_datasources.py +29 -1
  250. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  251. nautobot/extras/tests/test_filters.py +6 -6
  252. nautobot/extras/tests/test_forms.py +33 -1
  253. nautobot/extras/tests/test_jobs.py +178 -32
  254. nautobot/extras/tests/test_models.py +299 -10
  255. nautobot/extras/tests/test_plugins.py +62 -9
  256. nautobot/extras/tests/test_relationships.py +120 -9
  257. nautobot/extras/tests/test_utils.py +22 -1
  258. nautobot/extras/tests/test_views.py +56 -194
  259. nautobot/extras/utils.py +20 -10
  260. nautobot/extras/views.py +85 -110
  261. nautobot/ipam/api/fields.py +3 -3
  262. nautobot/ipam/api/serializers.py +41 -33
  263. nautobot/ipam/api/views.py +68 -117
  264. nautobot/ipam/factory.py +1 -1
  265. nautobot/ipam/filters.py +3 -2
  266. nautobot/ipam/lookups.py +101 -62
  267. nautobot/ipam/models.py +74 -18
  268. nautobot/ipam/querysets.py +2 -2
  269. nautobot/ipam/tables.py +25 -9
  270. nautobot/ipam/templates/ipam/ipaddress.html +2 -10
  271. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +1 -7
  272. nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -7
  273. nautobot/ipam/templates/ipam/prefix.html +2 -10
  274. nautobot/ipam/templates/ipam/prefix_edit.html +1 -7
  275. nautobot/ipam/templates/ipam/rir.html +1 -1
  276. nautobot/ipam/templates/ipam/routetarget.html +1 -1
  277. nautobot/ipam/templates/ipam/service.html +1 -1
  278. nautobot/ipam/templates/ipam/vlan.html +2 -10
  279. nautobot/ipam/templates/ipam/vlan_edit.html +1 -7
  280. nautobot/ipam/templates/ipam/vlangroup.html +1 -1
  281. nautobot/ipam/templates/ipam/vrf.html +1 -1
  282. nautobot/ipam/templates/ipam/vrf_edit.html +1 -7
  283. nautobot/ipam/tests/test_api.py +436 -3
  284. nautobot/ipam/tests/test_forms.py +49 -47
  285. nautobot/ipam/tests/test_migrations.py +30 -30
  286. nautobot/ipam/tests/test_models.py +119 -34
  287. nautobot/ipam/tests/test_querysets.py +63 -1
  288. nautobot/ipam/tests/test_utils.py +41 -2
  289. nautobot/ipam/tests/test_views.py +3 -0
  290. nautobot/ipam/utils/__init__.py +54 -17
  291. nautobot/ipam/views.py +61 -87
  292. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  293. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  294. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +40 -2
  295. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  296. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  297. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  298. nautobot/project-static/docs/404.html +131 -14
  299. nautobot/project-static/docs/apps/index.html +131 -14
  300. nautobot/project-static/docs/apps/nautobot-apps.html +132 -16
  301. nautobot/project-static/docs/assets/_mkdocstrings.css +25 -1
  302. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js → bundle.60a45f97.min.js} +2 -2
  303. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js.map → bundle.60a45f97.min.js.map} +2 -2
  304. nautobot/project-static/docs/assets/javascripts/workers/{search.6ce7567c.min.js → search.f8cc74c7.min.js} +1 -1
  305. nautobot/project-static/docs/assets/javascripts/workers/{search.6ce7567c.min.js.map → search.f8cc74c7.min.js.map} +1 -1
  306. nautobot/project-static/docs/assets/stylesheets/{main.6f8fc17f.min.css → main.a40c8224.min.css} +1 -1
  307. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +147 -20
  308. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +144 -17
  309. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +459 -132
  310. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +175 -28
  311. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +180 -31
  312. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +138 -16
  313. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +137 -15
  314. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +164 -27
  315. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +187 -38
  316. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +193 -31
  317. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +216 -48
  318. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +324 -75
  319. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +666 -175
  320. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +194 -46
  321. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +538 -177
  322. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +578 -221
  323. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +145 -18
  324. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +156 -25
  325. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +492 -65
  326. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +705 -215
  327. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +943 -422
  328. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +144 -17
  329. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +619 -200
  330. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +474 -159
  331. nautobot/project-static/docs/development/apps/api/configuration-view.html +131 -14
  332. nautobot/project-static/docs/development/apps/api/database-backend-config.html +131 -14
  333. nautobot/project-static/docs/development/apps/api/models/django-admin.html +131 -14
  334. nautobot/project-static/docs/development/apps/api/models/global-search.html +131 -14
  335. nautobot/project-static/docs/development/apps/api/models/graphql.html +131 -14
  336. nautobot/project-static/docs/development/apps/api/models/index.html +131 -14
  337. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +131 -14
  338. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +131 -14
  339. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +131 -14
  340. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +131 -14
  341. nautobot/project-static/docs/development/apps/api/platform-features/index.html +131 -14
  342. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +131 -14
  343. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +131 -14
  344. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +131 -14
  345. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +131 -14
  346. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +153 -17
  347. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +131 -14
  348. nautobot/project-static/docs/development/apps/api/prometheus.html +131 -14
  349. nautobot/project-static/docs/development/apps/api/setup.html +131 -14
  350. nautobot/project-static/docs/development/apps/api/testing.html +131 -14
  351. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +131 -14
  352. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +131 -14
  353. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +131 -14
  354. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +131 -14
  355. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +131 -14
  356. nautobot/project-static/docs/development/apps/api/views/base-template.html +131 -14
  357. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +131 -14
  358. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +131 -14
  359. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +131 -14
  360. nautobot/project-static/docs/development/apps/api/views/index.html +131 -14
  361. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +131 -14
  362. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +131 -14
  363. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +131 -14
  364. nautobot/project-static/docs/development/apps/api/views/notes.html +131 -14
  365. nautobot/project-static/docs/development/apps/api/views/rest-api.html +137 -16
  366. nautobot/project-static/docs/development/apps/api/views/urls.html +131 -14
  367. nautobot/project-static/docs/development/apps/index.html +131 -14
  368. nautobot/project-static/docs/development/apps/migration/code-updates.html +131 -14
  369. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +131 -14
  370. nautobot/project-static/docs/development/apps/migration/from-v1.html +131 -14
  371. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +131 -14
  372. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +131 -14
  373. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +131 -14
  374. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +131 -14
  375. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +135 -18
  376. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +131 -14
  377. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +297 -25
  378. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +131 -14
  379. nautobot/project-static/docs/development/apps/porting-from-netbox.html +131 -14
  380. nautobot/project-static/docs/development/core/application-registry.html +131 -14
  381. nautobot/project-static/docs/development/core/best-practices.html +131 -14
  382. nautobot/project-static/docs/development/core/bootstrap-ui.html +131 -14
  383. nautobot/project-static/docs/development/core/caching.html +131 -14
  384. nautobot/project-static/docs/development/core/controllers.html +131 -14
  385. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +158 -84
  386. nautobot/project-static/docs/development/core/generic-views.html +131 -14
  387. nautobot/project-static/docs/development/core/getting-started.html +334 -234
  388. nautobot/project-static/docs/development/core/homepage.html +134 -17
  389. nautobot/project-static/docs/development/core/index.html +131 -14
  390. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9829 -0
  391. nautobot/project-static/docs/development/core/model-checklist.html +141 -22
  392. nautobot/project-static/docs/development/core/model-features.html +131 -14
  393. nautobot/project-static/docs/development/core/natural-keys.html +131 -14
  394. nautobot/project-static/docs/development/core/navigation-menu.html +131 -14
  395. nautobot/project-static/docs/development/core/release-checklist.html +134 -17
  396. nautobot/project-static/docs/development/core/role-internals.html +131 -14
  397. nautobot/project-static/docs/development/core/settings.html +131 -14
  398. nautobot/project-static/docs/development/core/style-guide.html +134 -17
  399. nautobot/project-static/docs/development/core/templates.html +132 -15
  400. nautobot/project-static/docs/development/core/testing.html +131 -14
  401. nautobot/project-static/docs/development/core/ui-component-framework.html +454 -283
  402. nautobot/project-static/docs/development/core/user-preferences.html +131 -14
  403. nautobot/project-static/docs/development/index.html +131 -14
  404. nautobot/project-static/docs/development/jobs/index.html +301 -132
  405. nautobot/project-static/docs/development/jobs/migration/from-v1.html +131 -14
  406. nautobot/project-static/docs/index.html +139 -33
  407. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  408. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  409. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  410. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  411. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  412. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  413. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  414. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  415. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  416. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  417. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  418. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  419. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  420. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  421. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  422. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  423. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  424. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  425. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  426. nautobot/project-static/docs/objects.inv +0 -0
  427. nautobot/project-static/docs/overview/application_stack.html +132 -17
  428. nautobot/project-static/docs/overview/design_philosophy.html +131 -14
  429. nautobot/project-static/docs/release-notes/index.html +137 -22
  430. nautobot/project-static/docs/release-notes/version-1.0.html +319 -203
  431. nautobot/project-static/docs/release-notes/version-1.1.html +316 -200
  432. nautobot/project-static/docs/release-notes/version-1.2.html +391 -275
  433. nautobot/project-static/docs/release-notes/version-1.3.html +417 -301
  434. nautobot/project-static/docs/release-notes/version-1.4.html +502 -387
  435. nautobot/project-static/docs/release-notes/version-1.5.html +690 -576
  436. nautobot/project-static/docs/release-notes/version-1.6.html +989 -457
  437. nautobot/project-static/docs/release-notes/version-2.0.html +613 -499
  438. nautobot/project-static/docs/release-notes/version-2.1.html +448 -334
  439. nautobot/project-static/docs/release-notes/version-2.2.html +441 -327
  440. nautobot/project-static/docs/release-notes/version-2.3.html +1171 -451
  441. nautobot/project-static/docs/release-notes/version-2.4.html +800 -111
  442. nautobot/project-static/docs/requirements.txt +2 -2
  443. nautobot/project-static/docs/search/search_index.json +1 -1
  444. nautobot/project-static/docs/sitemap.xml +303 -287
  445. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  446. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +131 -14
  447. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +131 -14
  448. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +133 -16
  449. nautobot/project-static/docs/user-guide/administration/configuration/index.html +131 -14
  450. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +131 -14
  451. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +195 -18
  452. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +131 -14
  453. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +134 -17
  454. nautobot/project-static/docs/user-guide/administration/guides/docker.html +131 -14
  455. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +131 -14
  456. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +131 -14
  457. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +131 -14
  458. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +131 -14
  459. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +131 -14
  460. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +133 -16
  461. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +131 -14
  462. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +131 -14
  463. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +131 -14
  464. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +151 -18
  465. nautobot/project-static/docs/user-guide/administration/installation/index.html +131 -14
  466. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +132 -15
  467. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +131 -14
  468. nautobot/project-static/docs/user-guide/administration/installation/services.html +131 -14
  469. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +131 -14
  470. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +131 -14
  471. nautobot/project-static/docs/user-guide/administration/security/index.html +9420 -0
  472. nautobot/project-static/docs/user-guide/administration/security/notices.html +9843 -0
  473. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +131 -14
  474. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +131 -14
  475. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +131 -14
  476. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +131 -14
  477. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +131 -14
  478. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +131 -14
  479. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +131 -14
  480. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +134 -18
  481. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +131 -14
  482. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +131 -14
  483. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +131 -14
  484. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +131 -14
  485. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +131 -14
  486. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +131 -14
  487. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +131 -14
  488. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +131 -14
  489. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +131 -14
  490. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +131 -14
  491. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +131 -14
  492. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +131 -14
  493. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +131 -14
  494. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +131 -14
  495. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +131 -14
  496. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +131 -14
  497. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +131 -14
  498. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +131 -14
  499. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +131 -14
  500. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +131 -14
  501. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +131 -14
  502. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +131 -14
  503. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +131 -14
  504. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +131 -14
  505. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +131 -14
  506. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +131 -14
  507. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +131 -14
  508. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +131 -14
  509. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +131 -14
  510. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +131 -14
  511. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +131 -14
  512. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +131 -14
  513. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +131 -14
  514. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +131 -14
  515. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +131 -14
  516. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +131 -14
  517. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +131 -14
  518. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +131 -14
  519. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +131 -14
  520. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +131 -14
  521. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +131 -14
  522. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +131 -14
  523. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +131 -14
  524. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +131 -14
  525. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +131 -14
  526. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +131 -14
  527. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +131 -14
  528. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +131 -14
  529. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +131 -14
  530. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +131 -14
  531. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +131 -14
  532. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +131 -14
  533. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +131 -14
  534. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +131 -14
  535. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +131 -14
  536. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +131 -14
  537. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +131 -14
  538. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +135 -22
  539. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +131 -14
  540. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +131 -14
  541. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +131 -14
  542. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +131 -14
  543. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +131 -14
  544. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +131 -14
  545. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +131 -14
  546. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +131 -14
  547. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +131 -14
  548. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +131 -14
  549. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +131 -14
  550. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +131 -14
  551. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +134 -17
  552. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +131 -14
  553. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +131 -14
  554. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +131 -14
  555. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +131 -14
  556. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +131 -14
  557. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +131 -14
  558. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +131 -14
  559. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +131 -14
  560. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +131 -14
  561. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +131 -14
  562. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +131 -14
  563. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +131 -14
  564. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +131 -14
  565. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +131 -14
  566. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +131 -14
  567. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +134 -17
  568. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +131 -14
  569. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +131 -14
  570. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +131 -14
  571. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +131 -14
  572. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +131 -14
  573. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +131 -14
  574. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +236 -34
  575. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +131 -14
  576. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  577. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  578. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  579. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  580. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  581. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  582. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  583. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  584. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  585. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  586. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  587. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  588. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  589. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +131 -14
  590. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +131 -14
  591. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +134 -17
  592. nautobot/project-static/docs/{development/core/local-k8s.html → user-guide/feature-guides/wireless-networks-and-controllers.html} +632 -566
  593. nautobot/project-static/docs/user-guide/index.html +131 -14
  594. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +131 -14
  595. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +135 -18
  596. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +131 -14
  597. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +131 -14
  598. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +131 -14
  599. nautobot/project-static/docs/user-guide/platform-functionality/events.html +131 -14
  600. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +131 -14
  601. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +131 -14
  602. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +451 -16
  603. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +131 -14
  604. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +131 -14
  605. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +131 -14
  606. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +135 -17
  607. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +131 -14
  608. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +134 -17
  609. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +131 -14
  610. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +131 -14
  611. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9797 -0
  612. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +131 -14
  613. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +131 -14
  614. nautobot/project-static/docs/user-guide/platform-functionality/note.html +131 -14
  615. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +131 -14
  616. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +132 -15
  617. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +131 -14
  618. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +131 -14
  619. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +179 -35
  620. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +159 -15
  621. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +131 -14
  622. nautobot/project-static/docs/user-guide/platform-functionality/role.html +131 -14
  623. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +131 -14
  624. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +131 -14
  625. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +131 -14
  626. nautobot/project-static/docs/user-guide/platform-functionality/status.html +131 -14
  627. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +131 -14
  628. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +131 -14
  629. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +131 -14
  630. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +131 -14
  631. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +131 -14
  632. nautobot/project-static/js/forms.js +1 -1
  633. nautobot/tenancy/api/views.py +9 -13
  634. nautobot/tenancy/templates/tenancy/tenant.html +1 -2
  635. nautobot/tenancy/templates/tenancy/tenantgroup.html +1 -1
  636. nautobot/tenancy/views.py +4 -2
  637. nautobot/users/admin.py +1 -1
  638. nautobot/users/api/serializers.py +5 -4
  639. nautobot/users/api/views.py +3 -3
  640. nautobot/virtualization/api/serializers.py +4 -4
  641. nautobot/virtualization/api/views.py +5 -24
  642. nautobot/virtualization/filters.py +20 -3
  643. nautobot/virtualization/models.py +1 -1
  644. nautobot/virtualization/tables.py +2 -2
  645. nautobot/virtualization/templates/virtualization/cluster.html +1 -1
  646. nautobot/virtualization/templates/virtualization/cluster_edit.html +1 -7
  647. nautobot/virtualization/templates/virtualization/clustergroup.html +1 -1
  648. nautobot/virtualization/templates/virtualization/clustertype.html +1 -1
  649. nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -10
  650. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -8
  651. nautobot/virtualization/templates/virtualization/vminterface.html +1 -1
  652. nautobot/virtualization/tests/test_filters.py +17 -0
  653. nautobot/wireless/filters.py +2 -2
  654. nautobot/wireless/forms.py +1 -1
  655. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +1 -9
  656. nautobot/wireless/tests/integration/__init__.py +0 -0
  657. nautobot/wireless/tests/integration/test_radio_profile.py +42 -0
  658. nautobot/wireless/tests/test_filters.py +29 -1
  659. nautobot/wireless/tests/test_views.py +22 -1
  660. nautobot/wireless/views.py +0 -10
  661. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/METADATA +9 -9
  662. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/RECORD +667 -610
  663. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/WHEEL +1 -1
  664. nautobot/core/fixtures/user-data.json +0 -59
  665. /nautobot/project-static/docs/assets/stylesheets/{main.6f8fc17f.min.css.map → main.a40c8224.min.css.map} +0 -0
  666. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/LICENSE.txt +0 -0
  667. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/NOTICE +0 -0
  668. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.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.46">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.50">
22
22
 
23
23
 
24
24
 
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- <link rel="stylesheet" href="../../assets/stylesheets/main.6f8fc17f.min.css">
29
+ <link rel="stylesheet" href="../../assets/stylesheets/main.a40c8224.min.css">
30
30
 
31
31
 
32
32
  <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 0H128c-17.7 0-32 14.3-32 32s14.3 32 32 32v132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6 0 480.9 31.1 512 69.4 512h309.2c38.3 0 69.4-31.1 69.4-69.4 0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32S337.7 0 320 0zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1"/></svg>');}</style>
41
+ <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 0H128c-17.7 0-32 14.3-32 32s14.3 32 32 32v132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6 0 480.9 31.1 512 69.4 512h309.2c38.3 0 69.4-31.1 69.4-69.4 0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32S337.7 0 320 0zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1"/></svg>');}</style>
42
42
 
43
43
 
44
44
 
@@ -95,7 +95,7 @@
95
95
  <div data-md-component="skip">
96
96
 
97
97
 
98
- <a href="#nautobot-ui-framework" class="md-skip">
98
+ <a href="#nautobot-ui-component-framework" class="md-skip">
99
99
  Skip to content
100
100
  </a>
101
101
 
@@ -217,7 +217,7 @@
217
217
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
218
218
  <div class="md-source__icon md-icon">
219
219
 
220
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
220
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
221
221
  </div>
222
222
  <div class="md-source__repository">
223
223
  GitHub
@@ -377,7 +377,7 @@
377
377
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
378
378
  <div class="md-source__icon md-icon">
379
379
 
380
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
380
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
381
381
  </div>
382
382
  <div class="md-source__repository">
383
383
  GitHub
@@ -1697,6 +1697,81 @@
1697
1697
 
1698
1698
 
1699
1699
 
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+ <li class="md-nav__item md-nav__item--nested">
1714
+
1715
+
1716
+
1717
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_7" >
1718
+
1719
+
1720
+
1721
+ <div class="md-nav__link md-nav__container">
1722
+ <a href="../../user-guide/administration/security/index.html" class="md-nav__link ">
1723
+
1724
+
1725
+ <span class="md-ellipsis">
1726
+ Security
1727
+ </span>
1728
+
1729
+
1730
+ </a>
1731
+
1732
+
1733
+ <label class="md-nav__link " for="__nav_2_1_7" id="__nav_2_1_7_label" tabindex="0">
1734
+ <span class="md-nav__icon md-icon"></span>
1735
+ </label>
1736
+
1737
+ </div>
1738
+
1739
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_7_label" aria-expanded="false">
1740
+ <label class="md-nav__title" for="__nav_2_1_7">
1741
+ <span class="md-nav__icon md-icon"></span>
1742
+ Security
1743
+ </label>
1744
+ <ul class="md-nav__list" data-md-scrollfix>
1745
+
1746
+
1747
+
1748
+
1749
+
1750
+
1751
+
1752
+ <li class="md-nav__item">
1753
+ <a href="../../user-guide/administration/security/notices.html" class="md-nav__link">
1754
+
1755
+
1756
+ <span class="md-ellipsis">
1757
+ Notices
1758
+ </span>
1759
+
1760
+
1761
+ </a>
1762
+ </li>
1763
+
1764
+
1765
+
1766
+
1767
+ </ul>
1768
+ </nav>
1769
+
1770
+ </li>
1771
+
1772
+
1773
+
1774
+
1700
1775
  </ul>
1701
1776
  </nav>
1702
1777
 
@@ -2112,6 +2187,27 @@
2112
2187
 
2113
2188
 
2114
2189
 
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+ <li class="md-nav__item">
2197
+ <a href="../../user-guide/feature-guides/wireless-networks-and-controllers.html" class="md-nav__link">
2198
+
2199
+
2200
+ <span class="md-ellipsis">
2201
+ Wireless Networks and Controllers
2202
+ </span>
2203
+
2204
+
2205
+ </a>
2206
+ </li>
2207
+
2208
+
2209
+
2210
+
2115
2211
  </ul>
2116
2212
  </nav>
2117
2213
 
@@ -5131,6 +5227,27 @@
5131
5227
 
5132
5228
 
5133
5229
 
5230
+ <li class="md-nav__item">
5231
+ <a href="../../user-guide/platform-functionality/jobs/kubernetes-job-support.html" class="md-nav__link">
5232
+
5233
+
5234
+ <span class="md-ellipsis">
5235
+ Kubernetes Job Support
5236
+ </span>
5237
+
5238
+
5239
+ </a>
5240
+ </li>
5241
+
5242
+
5243
+
5244
+
5245
+
5246
+
5247
+
5248
+
5249
+
5250
+
5134
5251
  <li class="md-nav__item">
5135
5252
  <a href="../../user-guide/platform-functionality/jobs/jobbutton.html" class="md-nav__link">
5136
5253
 
@@ -8062,11 +8179,11 @@
8062
8179
 
8063
8180
 
8064
8181
  <li class="md-nav__item">
8065
- <a href="local-k8s.html" class="md-nav__link">
8182
+ <a href="minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link">
8066
8183
 
8067
8184
 
8068
8185
  <span class="md-ellipsis">
8069
- Local Kubernetes Cluster
8186
+ Minikube Dev Environment for K8s Jobs
8070
8187
  </span>
8071
8188
 
8072
8189
 
@@ -8418,6 +8535,21 @@
8418
8535
  </span>
8419
8536
  </a>
8420
8537
 
8538
+ <nav class="md-nav" aria-label="Buttons">
8539
+ <ul class="md-nav__list">
8540
+
8541
+ <li class="md-nav__item">
8542
+ <a href="#buttons-example" class="md-nav__link">
8543
+ <span class="md-ellipsis">
8544
+ Buttons Example
8545
+ </span>
8546
+ </a>
8547
+
8548
+ </li>
8549
+
8550
+ </ul>
8551
+ </nav>
8552
+
8421
8553
  </li>
8422
8554
 
8423
8555
  </ul>
@@ -9702,6 +9834,21 @@
9702
9834
  </span>
9703
9835
  </a>
9704
9836
 
9837
+ <nav class="md-nav" aria-label="Buttons">
9838
+ <ul class="md-nav__list">
9839
+
9840
+ <li class="md-nav__item">
9841
+ <a href="#buttons-example" class="md-nav__link">
9842
+ <span class="md-ellipsis">
9843
+ Buttons Example
9844
+ </span>
9845
+ </a>
9846
+
9847
+ </li>
9848
+
9849
+ </ul>
9850
+ </nav>
9851
+
9705
9852
  </li>
9706
9853
 
9707
9854
  </ul>
@@ -10198,7 +10345,7 @@
10198
10345
 
10199
10346
 
10200
10347
 
10201
- <h1 id="nautobot-ui-framework">Nautobot UI Framework<a class="headerlink" href="#nautobot-ui-framework" title="Permanent link">&para;</a></h1>
10348
+ <h1 id="nautobot-ui-component-framework">Nautobot UI Component Framework<a class="headerlink" href="#nautobot-ui-component-framework" title="Permanent link">&para;</a></h1>
10202
10349
  <h2 id="table-of-contents">Table of Contents<a class="headerlink" href="#table-of-contents" title="Permanent link">&para;</a></h2>
10203
10350
  <ul>
10204
10351
  <li><a href="#introduction">Introduction</a></li>
@@ -10213,14 +10360,12 @@
10213
10360
  </ul>
10214
10361
  <h2 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permanent link">&para;</a></h2>
10215
10362
  <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>
10216
- <!-- markdownlint-disable no-inline-html -->
10363
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10217
10364
  <div class="grid cards example-images">
10218
10365
  <ul>
10219
10366
  <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>
10220
10367
  </ul>
10221
10368
  </div>
10222
- <!-- markdownlint-enable no-inline-html -->
10223
-
10224
10369
  <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>
10225
10370
  <ul>
10226
10371
  <li>✨ <strong>Reduced Development Time</strong>: Eliminate boilerplate HTML/CSS</li>
@@ -10262,41 +10407,61 @@
10262
10407
  <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>
10263
10408
  <h3 id="panels">Panels<a class="headerlink" href="#panels" title="Permanent link">&para;</a></h3>
10264
10409
  <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>
10265
- <!-- markdownlint-disable no-inline-html -->
10410
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10266
10411
  <div class="grid cards example-images">
10267
10412
  <ul>
10268
10413
  <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>
10269
10414
  </ul>
10270
10415
  </div>
10271
- <!-- markdownlint-enable no-inline-html -->
10272
-
10273
10416
  <h3 id="buttons">Buttons<a class="headerlink" href="#buttons" title="Permanent link">&para;</a></h3>
10274
10417
  <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>
10418
+ <h4 id="buttons-example">Buttons Example<a class="headerlink" href="#buttons-example" title="Permanent link">&para;</a></h4>
10419
+ <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>
10420
+ <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
10421
+ <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>
10422
+ <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>
10423
+ <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>
10424
+ <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a> <span class="n">Button</span><span class="p">(</span>
10425
+ <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>
10426
+ <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>
10427
+ <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>
10428
+ <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>
10429
+ <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>
10430
+ <a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a> <span class="p">),</span>
10431
+ <a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a> <span class="p">],</span>
10432
+ <a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a> <span class="p">)</span>
10433
+ </code></pre></div>
10434
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10435
+ <div class="grid cards example-images">
10436
+ <ul>
10437
+ <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>
10438
+ </ul>
10439
+ </div>
10275
10440
  <h2 id="panel-types">Panel Types<a class="headerlink" href="#panel-types" title="Permanent link">&para;</a></h2>
10276
10441
  <h3 id="base-panel">Base Panel<a class="headerlink" href="#base-panel" title="Permanent link">&para;</a></h3>
10277
10442
  <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>
10278
10443
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Panel">Code reference</a></p>
10279
10444
  <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>
10288
10445
  <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>
10289
10446
  <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
10290
10447
  <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="n">Panel</span><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>
10448
+ <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>
10449
+ <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>
10450
+ <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>
10451
+ <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="p">)</span>
10452
+ </code></pre></div>
10453
+ <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>
10454
+ <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>
10455
+ <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="n">Panel</span><span class="p">(</span>
10456
+ <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>
10457
+ <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>
10458
+ <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>
10459
+ <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>
10460
+ <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>
10461
+ <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>
10462
+ <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>
10463
+ <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>
10464
+ <a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="p">)</span>
10300
10465
  </code></pre></div>
10301
10466
  <h3 id="objectfieldspanel">ObjectFieldsPanel<a class="headerlink" href="#objectfieldspanel" title="Permanent link">&para;</a></h3>
10302
10467
  <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>
@@ -10309,38 +10474,39 @@
10309
10474
  - `comments`, `tags` (these are automatically added as standalone panels)
10310
10475
  </code></pre></div>
10311
10476
  <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>
10321
10477
  <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>
10322
10478
  <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>
10323
10479
  <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="n">ObjectFieldsPanel</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>
10480
+ <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>
10325
10481
  <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>
10326
10482
  <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>
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>
10483
+ <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>
10484
+ <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="p">)</span>
10485
+ </code></pre></div>
10486
+ <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>
10487
+ <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>
10488
+ <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>
10489
+ <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>
10490
+ <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>
10491
+ <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>
10492
+ <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>
10493
+ <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>
10494
+ <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>
10495
+ <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>
10496
+ <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>
10497
+ <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>
10498
+ <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>
10499
+ <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>
10500
+ <a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a> <span class="p">},</span>
10501
+ <a id="__codelineno-5-16" name="__codelineno-5-16" href="#__codelineno-5-16"></a><span class="p">),</span>
10335
10502
  </code></pre></div>
10336
- <!-- markdownlint-disable no-inline-html -->
10503
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10337
10504
  <div class="grid cards example-images">
10338
10505
  <ul>
10339
10506
  <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>
10507
+ <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>
10340
10508
  </ul>
10341
10509
  </div>
10342
- <!-- markdownlint-enable no-inline-html -->
10343
-
10344
10510
  <h3 id="keyvaluetablepanel">KeyValueTablePanel<a class="headerlink" href="#keyvaluetablepanel" title="Permanent link">&para;</a></h3>
10345
10511
  <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>
10346
10512
  <div class="admonition tip">
@@ -10349,65 +10515,65 @@
10349
10515
  </div>
10350
10516
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.KeyValueTablePanel">Code reference</a></p>
10351
10517
  <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>
10362
10518
  <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>
10363
10519
  <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>
10364
10520
  <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
10365
10521
  <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>
10366
10522
  <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>
10367
10523
  <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>
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>
10524
+ <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>
10369
10525
  <a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></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>
10526
+ <a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="p">)</span>
10527
+ </code></pre></div>
10528
+ <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>
10529
+ <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>
10530
+ <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
10531
+ <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>
10532
+ <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>
10533
+ <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>
10534
+ <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>
10535
+ <a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a> <span class="p">},</span>
10536
+ <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>
10537
+ <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>
10538
+ <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>
10539
+ <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>
10540
+ <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>
10541
+ <a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a> <span class="p">],</span>
10542
+ <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>
10543
+ <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>
10544
+ <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>
10545
+ <a id="__codelineno-7-18" name="__codelineno-7-18" href="#__codelineno-7-18"></a> <span class="p">]</span>
10546
+ <a id="__codelineno-7-19" name="__codelineno-7-19" href="#__codelineno-7-19"></a> <span class="p">},</span>
10547
+ <a id="__codelineno-7-20" name="__codelineno-7-20" href="#__codelineno-7-20"></a><span class="p">)</span>
10382
10548
  </code></pre></div>
10383
10549
  <h3 id="groupedkeyvaluetablepanel">GroupedKeyValueTablePanel<a class="headerlink" href="#groupedkeyvaluetablepanel" title="Permanent link">&para;</a></h3>
10384
10550
  <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>
10385
10551
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.GroupedKeyValueTablePanel">Code reference</a></p>
10386
10552
  <h4 id="groupedkeyvaluetablepanel-examples">GroupedKeyValueTablePanel Examples<a class="headerlink" href="#groupedkeyvaluetablepanel-examples" title="Permanent link">&para;</a></h4>
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>
10553
+ <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>
10554
+ <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
10555
+ <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
10556
+ <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>
10557
+ <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>
10558
+ <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>
10559
+ <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>
10560
+ <a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a> <span class="c1"># Data Structure</span>
10561
+ <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>
10562
+ <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>
10563
+ <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>
10564
+ <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>
10565
+ <a id="__codelineno-8-13" name="__codelineno-8-13" href="#__codelineno-8-13"></a> <span class="p">},</span>
10566
+ <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>
10567
+ <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>
10568
+ <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>
10569
+ <a id="__codelineno-8-17" name="__codelineno-8-17" href="#__codelineno-8-17"></a> <span class="p">},</span>
10570
+ <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>
10571
+ <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>
10572
+ <a id="__codelineno-8-20" name="__codelineno-8-20" href="#__codelineno-8-20"></a> <span class="p">}</span>
10573
+ <a id="__codelineno-8-21" name="__codelineno-8-21" href="#__codelineno-8-21"></a> <span class="p">},</span>
10574
+ <a id="__codelineno-8-22" name="__codelineno-8-22" href="#__codelineno-8-22"></a><span class="p">)</span>
10409
10575
  </code></pre></div>
10410
- <!-- markdownlint-disable no-inline-html -->
10576
+ <!-- pyml disable-num-lines 7 no-inline-html -->
10411
10577
  <div class="grid cards example-images">
10412
10578
  <ul>
10413
10579
  <li>
@@ -10418,104 +10584,99 @@
10418
10584
  </li>
10419
10585
  </ul>
10420
10586
  </div>
10421
- <!-- markdownlint-enable no-inline-html -->
10422
-
10423
10587
  <h3 id="statspanel">StatsPanel<a class="headerlink" href="#statspanel" title="Permanent link">&para;</a></h3>
10424
10588
  <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>
10425
10589
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.StatsPanel">Code reference</a></p>
10426
10590
  <h4 id="statspanel-examples">StatsPanel Examples<a class="headerlink" href="#statspanel-examples" title="Permanent link">&para;</a></h4>
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>
10591
+ <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>
10592
+ <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
10593
+ <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="n">StatsPanel</span><span class="p">(</span>
10594
+ <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>
10595
+ <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>
10596
+ <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>
10597
+ <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>
10598
+ <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>
10599
+ <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>
10600
+ <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>
10601
+ <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>
10602
+ <a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a> <span class="c1"># Tuple of (Model, query_string)</span>
10603
+ <a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a> <span class="c1"># For complex relationships</span>
10604
+ <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>
10605
+ <a id="__codelineno-9-15" name="__codelineno-9-15" href="#__codelineno-9-15"></a> <span class="c1"># Another complex relationship example</span>
10606
+ <a id="__codelineno-9-16" name="__codelineno-9-16" href="#__codelineno-9-16"></a> <span class="p">],</span>
10607
+ <a id="__codelineno-9-17" name="__codelineno-9-17" href="#__codelineno-9-17"></a><span class="p">)</span>
10444
10608
  </code></pre></div>
10445
- <!-- markdownlint-disable no-inline-html -->
10609
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10446
10610
  <div class="grid cards example-images">
10447
10611
  <ul>
10612
+ <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>
10448
10613
  <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>
10449
10614
  </ul>
10450
10615
  </div>
10451
- <!-- markdownlint-enable no-inline-html -->
10452
-
10453
10616
  <h3 id="basetextpanel">BaseTextPanel<a class="headerlink" href="#basetextpanel" title="Permanent link">&para;</a></h3>
10454
10617
  <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>
10455
10618
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.BaseTextPanel">Code reference</a></p>
10456
- <!-- markdownlint-disable no-inline-html -->
10619
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10457
10620
  <div class="grid cards" style="width: 300px;">
10458
10621
  <ul>
10459
10622
  <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>
10460
10623
  </ul>
10461
10624
  </div>
10462
- <!-- markdownlint-enable no-inline-html -->
10463
-
10464
10625
  <h3 id="objecttextpanel">ObjectTextPanel<a class="headerlink" href="#objecttextpanel" title="Permanent link">&para;</a></h3>
10465
10626
  <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>
10466
10627
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ObjectTextPanel">Code reference</a></p>
10467
10628
  <h4 id="objecttextpanel-examples">ObjectTextPanel Examples<a class="headerlink" href="#objecttextpanel-examples" title="Permanent link">&para;</a></h4>
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>
10629
+ <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>
10630
+ <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>
10631
+ <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="n">ObjectTextPanel</span><span class="p">(</span>
10632
+ <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>
10633
+ <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>
10634
+ <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>
10635
+ <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>
10636
+ <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>
10637
+ <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>
10638
+ <a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a><span class="p">)</span>
10478
10639
  </code></pre></div>
10479
10640
  <h3 id="textpanel">TextPanel<a class="headerlink" href="#textpanel" title="Permanent link">&para;</a></h3>
10480
10641
  <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>
10481
10642
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.TextPanel">Code reference</a></p>
10482
10643
  <h4 id="textpanel-examples">TextPanel Examples<a class="headerlink" href="#textpanel-examples" title="Permanent link">&para;</a></h4>
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>
10644
+ <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>
10645
+ <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>
10646
+ <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="n">TextPanel</span><span class="p">(</span>
10647
+ <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>
10648
+ <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>
10649
+ <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>
10650
+ <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>
10651
+ <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>
10652
+ <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>
10653
+ <a id="__codelineno-11-10" name="__codelineno-11-10" href="#__codelineno-11-10"></a><span class="p">)</span>
10493
10654
  </code></pre></div>
10494
10655
  <h3 id="datatablepanel">DataTablePanel<a class="headerlink" href="#datatablepanel" title="Permanent link">&para;</a></h3>
10495
10656
  <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>
10496
10657
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.DataTablePanel">Code reference</a></p>
10497
10658
  <p>Note:
10498
10659
  <code>columns</code>/<code>context_columns_key</code> and <code>column_headers</code>/<code>context_column_headers_key</code> are mutually exclusive pairs.</p>
10499
- <!-- markdownlint-disable no-inline-html -->
10660
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10500
10661
  <div class="grid cards example-images">
10501
10662
  <ul>
10502
10663
  <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>
10503
10664
  </ul>
10504
10665
  </div>
10505
- <!-- markdownlint-enable no-inline-html -->
10506
-
10507
10666
  <h4 id="datatablepanel-examples">DataTablePanel Examples<a class="headerlink" href="#datatablepanel-examples" title="Permanent link">&para;</a></h4>
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>
10667
+ <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>
10668
+ <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
10669
+ <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="n">DataTablePanel</span><span class="p">(</span>
10670
+ <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>
10671
+ <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>
10672
+ <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>
10673
+ <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>
10674
+ <a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a><span class="p">)</span>
10516
10675
  </code></pre></div>
10517
10676
  <h3 id="objectstablepanel">ObjectsTablePanel<a class="headerlink" href="#objectstablepanel" title="Permanent link">&para;</a></h3>
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>
10677
+ <p>The <code>ObjectsTablePanel</code> is a powerful component for rendering tables of Django model objects,
10678
+ particularly suited for displaying related objects within a detail view.
10679
+ It integrates with <code>django_tables2</code> and provides extensive customization options.</p>
10519
10680
  <h4 id="configuration-parameters">Configuration Parameters<a class="headerlink" href="#configuration-parameters" title="Permanent link">&para;</a></h4>
10520
10681
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ObjectsTablePanel">Code reference</a></p>
10521
10682
  <h5 id="core-configuration">Core Configuration<a class="headerlink" href="#core-configuration" title="Permanent link">&para;</a></h5>
@@ -10667,138 +10828,148 @@
10667
10828
  </tbody>
10668
10829
  </table>
10669
10830
  <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>
10681
10831
  <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>
10682
10832
  <a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>
10683
10833
  <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="n">ObjectsTablePanel</span><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>
10834
+ <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>
10835
+ <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>
10836
+ <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>
10837
+ <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>
10838
+ <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>
10839
+ <a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a>
10840
+ <a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a><span class="p">)</span>
10841
+ </code></pre></div>
10842
+ <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>
10843
+ <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
10844
+ <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
10845
+ <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>
10846
+ <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>
10847
+ <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>
10848
+ <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>
10849
+ <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>
10850
+ <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>
10851
+ <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>
10852
+ <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>
10853
+ <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>
10854
+ <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>
10855
+ <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>
10856
+ <a id="__codelineno-14-15" name="__codelineno-14-15" href="#__codelineno-14-15"></a><span class="p">)</span>
10696
10857
  </code></pre></div>
10697
10858
  <h2 id="button-types">Button Types<a class="headerlink" href="#button-types" title="Permanent link">&para;</a></h2>
10698
10859
  <h3 id="button">Button<a class="headerlink" href="#button" title="Permanent link">&para;</a></h3>
10699
10860
  <p>The Button component defines a single button in an object detail view.</p>
10700
10861
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Button">Code reference</a></p>
10701
10862
  <h4 id="button-examples">Button Examples<a class="headerlink" href="#button-examples" title="Permanent link">&para;</a></h4>
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>
10863
+ <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>
10864
+ <a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a> <span class="o">...</span>
10865
+ <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>
10866
+ <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>
10867
+ <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>
10868
+ <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a> <span class="n">Button</span><span class="p">(</span>
10869
+ <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>
10870
+ <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>
10871
+ <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>
10872
+ <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>
10873
+ <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>
10874
+ <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a> <span class="p">),</span>
10875
+ <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a> <span class="p">],</span>
10876
+ <a id="__codelineno-15-14" name="__codelineno-15-14" href="#__codelineno-15-14"></a> <span class="p">)</span>
10716
10877
  </code></pre></div>
10717
- <p><img alt="Button Example" src="../../media/development/core/ui-component-framework/button-example.png" /></p>
10878
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10879
+ <div class="grid cards example-images">
10880
+ <ul>
10881
+ <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>
10882
+ </ul>
10883
+ </div>
10718
10884
  <h3 id="dropdownbutton">DropdownButton<a class="headerlink" href="#dropdownbutton" title="Permanent link">&para;</a></h3>
10719
10885
  <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>
10720
10886
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.DropdownButton">Code reference</a></p>
10721
10887
  <h4 id="dropdownbutton-examples">DropdownButton Examples<a class="headerlink" href="#dropdownbutton-examples" title="Permanent link">&para;</a></h4>
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>
10888
+ <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>
10889
+ <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a> <span class="o">...</span>
10890
+ <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>
10891
+ <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>
10892
+ <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>
10893
+ <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>
10894
+ <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>
10895
+ <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>
10896
+ <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>
10897
+ <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>
10898
+ <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>
10899
+ <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>
10900
+ <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>
10901
+ <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>
10902
+ <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>
10903
+ <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>
10904
+ <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>
10905
+ <a id="__codelineno-16-18" name="__codelineno-16-18" href="#__codelineno-16-18"></a> <span class="p">),</span>
10906
+ <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>
10907
+ <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>
10908
+ <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>
10909
+ <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>
10910
+ <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>
10911
+ <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>
10912
+ <a id="__codelineno-16-25" name="__codelineno-16-25" href="#__codelineno-16-25"></a> <span class="p">),</span>
10913
+ <a id="__codelineno-16-26" name="__codelineno-16-26" href="#__codelineno-16-26"></a> <span class="o">...</span>
10914
+ <a id="__codelineno-16-27" name="__codelineno-16-27" href="#__codelineno-16-27"></a> <span class="p">),</span>
10915
+ <a id="__codelineno-16-28" name="__codelineno-16-28" href="#__codelineno-16-28"></a> <span class="p">),</span>
10916
+ <a id="__codelineno-16-29" name="__codelineno-16-29" href="#__codelineno-16-29"></a> <span class="p">],</span>
10917
+ <a id="__codelineno-16-30" name="__codelineno-16-30" href="#__codelineno-16-30"></a> <span class="p">)</span>
10752
10918
  </code></pre></div>
10753
- <p><img alt="DropdownButton Example" src="../../media/development/core/ui-component-framework/dropdown-button-example.png" /></p>
10919
+ <!-- pyml disable-num-lines 5 no-inline-html -->
10920
+ <div class="grid cards example-images">
10921
+ <ul>
10922
+ <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>
10923
+ </ul>
10924
+ </div>
10754
10925
  <h2 id="complete-example">Complete Example<a class="headerlink" href="#complete-example" title="Permanent link">&para;</a></h2>
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>
10926
+ <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>
10927
+ <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a> <span class="n">SectionChoices</span><span class="p">,</span>
10928
+ <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a> <span class="n">ObjectFieldsPanel</span><span class="p">,</span>
10929
+ <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> <span class="n">ObjectDetailContent</span><span class="p">,</span>
10930
+ <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> <span class="n">StatsPanel</span><span class="p">,</span>
10931
+ <a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a><span class="p">)</span>
10932
+ <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>
10933
+ <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>
10934
+ <a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a>
10935
+ <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>
10936
+ <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>
10937
+ <a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a>
10938
+ <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>
10939
+ <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>
10940
+ <a id="__codelineno-17-15" name="__codelineno-17-15" href="#__codelineno-17-15"></a> <span class="n">ObjectFieldsPanel</span><span class="p">(</span>
10941
+ <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>
10942
+ <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>
10943
+ <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>
10944
+ <a id="__codelineno-17-19" name="__codelineno-17-19" href="#__codelineno-17-19"></a> <span class="p">),</span>
10945
+ <a id="__codelineno-17-20" name="__codelineno-17-20" href="#__codelineno-17-20"></a> <span class="n">StatsPanel</span><span class="p">(</span>
10946
+ <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>
10947
+ <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>
10948
+ <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>
10949
+ <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>
10950
+ <a id="__codelineno-17-25" name="__codelineno-17-25" href="#__codelineno-17-25"></a> <span class="n">Device</span><span class="p">,</span>
10951
+ <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>
10952
+ <a id="__codelineno-17-27" name="__codelineno-17-27" href="#__codelineno-17-27"></a> <span class="p">],</span>
10953
+ <a id="__codelineno-17-28" name="__codelineno-17-28" href="#__codelineno-17-28"></a> <span class="p">),</span>
10954
+ <a id="__codelineno-17-29" name="__codelineno-17-29" href="#__codelineno-17-29"></a> <span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
10955
+ <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>
10956
+ <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>
10957
+ <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>
10958
+ <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>
10959
+ <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>
10960
+ <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>
10961
+ <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>
10962
+ <a id="__codelineno-17-37" name="__codelineno-17-37" href="#__codelineno-17-37"></a> <span class="p">}</span>
10963
+ <a id="__codelineno-17-38" name="__codelineno-17-38" href="#__codelineno-17-38"></a> <span class="p">},</span>
10964
+ <a id="__codelineno-17-39" name="__codelineno-17-39" href="#__codelineno-17-39"></a> <span class="p">),</span>
10965
+ <a id="__codelineno-17-40" name="__codelineno-17-40" href="#__codelineno-17-40"></a> <span class="n">ObjectTextPanel</span><span class="p">(</span>
10966
+ <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>
10967
+ <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>
10968
+ <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>
10969
+ <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>
10970
+ <a id="__codelineno-17-45" name="__codelineno-17-45" href="#__codelineno-17-45"></a> <span class="p">),</span>
10971
+ <a id="__codelineno-17-46" name="__codelineno-17-46" href="#__codelineno-17-46"></a> <span class="p">]</span>
10972
+ <a id="__codelineno-17-47" name="__codelineno-17-47" href="#__codelineno-17-47"></a> <span class="p">)</span>
10802
10973
  </code></pre></div>
10803
10974
  <h2 id="layouts-and-sections">Layouts and Sections<a class="headerlink" href="#layouts-and-sections" title="Permanent link">&para;</a></h2>
10804
10975
  <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>
@@ -10831,7 +11002,7 @@
10831
11002
  <h3 id="common-issues-and-solutions">Common Issues and Solutions<a class="headerlink" href="#common-issues-and-solutions" title="Permanent link">&para;</a></h3>
10832
11003
  <ol>
10833
11004
  <li>
10834
- <p><strong>Panels Not Appearing</strong></p>
11005
+ <p>Panels Not Appearing</p>
10835
11006
  <ul>
10836
11007
  <li>Verify section choices</li>
10837
11008
  <li>Check panel weights</li>
@@ -10839,7 +11010,7 @@
10839
11010
  </ul>
10840
11011
  </li>
10841
11012
  <li>
10842
- <p><strong>Performance Issues</strong></p>
11013
+ <p>Performance Issues</p>
10843
11014
  <ul>
10844
11015
  <li>Review query complexity in StatsPanel</li>
10845
11016
  <li>Optimize field selections</li>
@@ -10847,7 +11018,7 @@
10847
11018
  </ul>
10848
11019
  </li>
10849
11020
  <li>
10850
- <p><strong>Layout Problems</strong></p>
11021
+ <p>Layout Problems</p>
10851
11022
  <ul>
10852
11023
  <li>Validate section assignments</li>
10853
11024
  <li>Review weight ordering</li>
@@ -10855,7 +11026,7 @@
10855
11026
  </ul>
10856
11027
  </li>
10857
11028
  <li>
10858
- <p><strong>Value Rendering</strong></p>
11029
+ <p>Value Rendering</p>
10859
11030
  <ul>
10860
11031
  <li>Verify transform functions</li>
10861
11032
  <li>Check data types</li>
@@ -10959,7 +11130,7 @@
10959
11130
 
10960
11131
 
10961
11132
  <a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
10962
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32"/></svg>
11133
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32"/></svg>
10963
11134
  </a>
10964
11135
 
10965
11136
 
@@ -10967,7 +11138,7 @@
10967
11138
 
10968
11139
 
10969
11140
  <a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
10970
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
11141
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
10971
11142
  </a>
10972
11143
 
10973
11144
 
@@ -10975,7 +11146,7 @@
10975
11146
 
10976
11147
 
10977
11148
  <a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
10978
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
11149
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
10979
11150
  </a>
10980
11151
 
10981
11152
 
@@ -10983,7 +11154,7 @@
10983
11154
 
10984
11155
 
10985
11156
  <a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
10986
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
11157
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
10987
11158
  </a>
10988
11159
 
10989
11160
 
@@ -10991,7 +11162,7 @@
10991
11162
 
10992
11163
 
10993
11164
  <a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
10994
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg>
11165
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg>
10995
11166
  </a>
10996
11167
 
10997
11168
  </div>
@@ -11006,10 +11177,10 @@
11006
11177
  </div>
11007
11178
 
11008
11179
 
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>
11180
+ <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.f8cc74c7.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>
11010
11181
 
11011
11182
 
11012
- <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script>
11183
+ <script src="../../assets/javascripts/bundle.60a45f97.min.js"></script>
11013
11184
 
11014
11185
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
11015
11186