nautobot 2.3.15b1__py3-none-any.whl → 2.4.0__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 (785) hide show
  1. nautobot/__init__.py +15 -0
  2. nautobot/apps/__init__.py +1 -1
  3. nautobot/apps/api.py +8 -10
  4. nautobot/apps/change_logging.py +2 -2
  5. nautobot/apps/choices.py +4 -4
  6. nautobot/apps/config.py +32 -3
  7. nautobot/apps/events.py +19 -0
  8. nautobot/apps/exceptions.py +0 -2
  9. nautobot/apps/factory.py +2 -2
  10. nautobot/apps/filters.py +1 -1
  11. nautobot/apps/forms.py +20 -20
  12. nautobot/apps/graphql.py +2 -2
  13. nautobot/apps/jobs.py +8 -8
  14. nautobot/apps/models.py +19 -19
  15. nautobot/apps/tables.py +1 -1
  16. nautobot/apps/testing.py +10 -10
  17. nautobot/apps/ui.py +44 -9
  18. nautobot/apps/utils.py +7 -15
  19. nautobot/apps/views.py +8 -6
  20. nautobot/circuits/api/serializers.py +1 -0
  21. nautobot/circuits/api/views.py +4 -8
  22. nautobot/circuits/navigation.py +0 -57
  23. nautobot/circuits/templates/circuits/circuit_create.html +1 -7
  24. nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -71
  25. nautobot/circuits/templates/circuits/inc/circuit_termination.html +6 -64
  26. nautobot/circuits/templates/circuits/inc/circuit_termination_cable_fragment.html +40 -0
  27. nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +26 -0
  28. nautobot/circuits/templates/circuits/provider_retrieve.html +0 -76
  29. nautobot/circuits/tests/integration/test_relationships.py +33 -24
  30. nautobot/circuits/tests/test_filters.py +4 -8
  31. nautobot/circuits/views.py +143 -26
  32. nautobot/cloud/api/views.py +6 -10
  33. nautobot/cloud/factory.py +4 -1
  34. nautobot/cloud/models.py +1 -1
  35. nautobot/cloud/tests/test_filters.py +5 -4
  36. nautobot/cloud/views.py +0 -16
  37. nautobot/core/api/constants.py +11 -0
  38. nautobot/core/api/fields.py +5 -5
  39. nautobot/core/api/filter_backends.py +3 -9
  40. nautobot/core/api/metadata.py +28 -256
  41. nautobot/core/api/pagination.py +3 -2
  42. nautobot/core/api/renderers.py +3 -0
  43. nautobot/core/api/schema.py +13 -2
  44. nautobot/core/api/serializers.py +54 -268
  45. nautobot/core/api/urls.py +3 -4
  46. nautobot/core/api/utils.py +0 -62
  47. nautobot/core/api/views.py +102 -159
  48. nautobot/core/apps/__init__.py +22 -575
  49. nautobot/core/celery/__init__.py +13 -0
  50. nautobot/core/celery/schedulers.py +48 -3
  51. nautobot/core/choices.py +2 -2
  52. nautobot/core/cli/__init__.py +8 -0
  53. nautobot/core/constants.py +7 -0
  54. nautobot/core/events/__init__.py +116 -0
  55. nautobot/core/events/base.py +27 -0
  56. nautobot/core/events/exceptions.py +10 -0
  57. nautobot/core/events/redis_broker.py +48 -0
  58. nautobot/core/events/syslog_broker.py +19 -0
  59. nautobot/core/exceptions.py +0 -6
  60. nautobot/core/filters.py +19 -16
  61. nautobot/core/forms/__init__.py +19 -19
  62. nautobot/core/forms/fields.py +62 -14
  63. nautobot/core/forms/forms.py +33 -2
  64. nautobot/core/forms/utils.py +2 -1
  65. nautobot/core/graphql/schema.py +3 -1
  66. nautobot/core/graphql/types.py +1 -1
  67. nautobot/core/jobs/__init__.py +28 -7
  68. nautobot/core/jobs/bulk_actions.py +248 -0
  69. nautobot/core/jobs/cleanup.py +2 -2
  70. nautobot/core/jobs/groups.py +1 -1
  71. nautobot/core/management/commands/generate_test_data.py +21 -0
  72. nautobot/core/management/commands/validate_models.py +1 -1
  73. nautobot/core/middleware.py +16 -0
  74. nautobot/core/models/__init__.py +1 -1
  75. nautobot/core/models/fields.py +11 -7
  76. nautobot/core/models/query_functions.py +2 -2
  77. nautobot/core/models/tree_queries.py +2 -2
  78. nautobot/core/settings.py +71 -4
  79. nautobot/core/settings.yaml +107 -0
  80. nautobot/core/tables.py +15 -51
  81. nautobot/core/tasks.py +1 -1
  82. nautobot/core/templates/about.html +67 -0
  83. nautobot/core/templates/components/button/default.html +7 -0
  84. nautobot/core/templates/components/button/dropdown.html +20 -0
  85. nautobot/core/templates/components/layout/one_over_two.html +19 -0
  86. nautobot/core/templates/components/layout/two_over_one.html +19 -0
  87. nautobot/core/templates/components/panel/body_content_data_table.html +27 -0
  88. nautobot/core/templates/components/panel/body_content_objects_table.html +4 -0
  89. nautobot/core/templates/components/panel/body_content_tags.html +6 -0
  90. nautobot/core/templates/components/panel/body_content_text.html +12 -0
  91. nautobot/core/templates/components/panel/body_wrapper_generic.html +3 -0
  92. nautobot/core/templates/components/panel/body_wrapper_key_value_table.html +3 -0
  93. nautobot/core/templates/components/panel/body_wrapper_table.html +3 -0
  94. nautobot/core/templates/components/panel/footer_contacts_table.html +20 -0
  95. nautobot/core/templates/components/panel/footer_content_table.html +14 -0
  96. nautobot/core/templates/components/panel/grouping_toggle.html +14 -0
  97. nautobot/core/templates/components/panel/header_extra_content_table.html +3 -0
  98. nautobot/core/templates/components/panel/panel.html +16 -0
  99. nautobot/core/templates/components/panel/stats_panel_body.html +8 -0
  100. nautobot/core/templates/components/tab/content_wrapper.html +3 -0
  101. nautobot/core/templates/components/tab/label_wrapper.html +5 -0
  102. nautobot/core/templates/components/tab/label_wrapper_distinct_view.html +3 -0
  103. nautobot/core/templates/generic/object_retrieve.html +28 -17
  104. nautobot/core/templates/inc/computed_fields/panel_data.html +4 -7
  105. nautobot/core/templates/inc/custom_fields/panel.html +2 -2
  106. nautobot/core/templates/inc/custom_fields/panel_data.html +4 -7
  107. nautobot/core/templates/inc/footer.html +1 -0
  108. nautobot/core/templates/inc/media.html +3 -0
  109. nautobot/core/templates/inc/nav_menu.html +2 -1
  110. nautobot/core/templates/inc/relationships_panel.html +1 -1
  111. nautobot/core/templates/inc/tenancy_form_panel.html +9 -0
  112. nautobot/core/templates/inc/tenant_table_row.html +11 -0
  113. nautobot/core/templates/nautobot_config.py.j2 +16 -0
  114. nautobot/core/templates/panel_table.html +12 -0
  115. nautobot/core/templates/utilities/render_jinja2.html +117 -0
  116. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  117. nautobot/core/templates/utilities/theme_preview.html +7 -0
  118. nautobot/core/templatetags/helpers.py +104 -6
  119. nautobot/core/templatetags/ui_framework.py +40 -0
  120. nautobot/core/testing/__init__.py +8 -8
  121. nautobot/core/testing/api.py +187 -137
  122. nautobot/core/testing/context.py +18 -0
  123. nautobot/core/testing/filters.py +44 -34
  124. nautobot/core/testing/forms.py +2 -0
  125. nautobot/core/testing/views.py +68 -146
  126. nautobot/core/tests/integration/test_app_home.py +0 -1
  127. nautobot/core/tests/integration/test_app_navbar.py +0 -1
  128. nautobot/core/tests/integration/test_filters.py +0 -2
  129. nautobot/core/tests/integration/test_home.py +0 -1
  130. nautobot/core/tests/integration/test_navbar.py +0 -1
  131. nautobot/core/tests/integration/test_view_authentication.py +2 -1
  132. nautobot/core/tests/nautobot_config.py +198 -0
  133. nautobot/core/tests/runner.py +3 -3
  134. nautobot/core/tests/test_api.py +154 -176
  135. nautobot/core/tests/test_events.py +214 -0
  136. nautobot/core/tests/test_forms.py +1 -0
  137. nautobot/core/tests/test_jinja_filters.py +1 -0
  138. nautobot/core/tests/test_jobs.py +387 -14
  139. nautobot/core/tests/test_navigations.py +7 -241
  140. nautobot/core/tests/test_settings_schema.py +7 -0
  141. nautobot/core/tests/test_tables.py +100 -0
  142. nautobot/core/tests/test_templatetags_helpers.py +16 -0
  143. nautobot/core/tests/test_ui.py +150 -0
  144. nautobot/core/tests/test_utils.py +55 -18
  145. nautobot/core/tests/test_views.py +153 -5
  146. nautobot/core/ui/__init__.py +0 -0
  147. nautobot/core/ui/base.py +11 -0
  148. nautobot/core/ui/choices.py +44 -0
  149. nautobot/core/ui/homepage.py +167 -0
  150. nautobot/core/ui/nav.py +280 -0
  151. nautobot/core/ui/object_detail.py +1855 -0
  152. nautobot/core/ui/utils.py +36 -0
  153. nautobot/core/urls.py +15 -0
  154. nautobot/core/utils/config.py +30 -3
  155. nautobot/core/utils/lookup.py +12 -2
  156. nautobot/core/utils/querysets.py +64 -0
  157. nautobot/core/utils/requests.py +24 -9
  158. nautobot/core/views/__init__.py +48 -1
  159. nautobot/core/views/generic.py +82 -177
  160. nautobot/core/views/mixins.py +98 -38
  161. nautobot/core/views/paginator.py +8 -5
  162. nautobot/core/views/renderers.py +9 -9
  163. nautobot/core/views/utils.py +11 -0
  164. nautobot/core/wsgi.py +3 -3
  165. nautobot/dcim/api/serializers.py +82 -189
  166. nautobot/dcim/api/urls.py +5 -0
  167. nautobot/dcim/api/views.py +57 -110
  168. nautobot/dcim/apps.py +1 -0
  169. nautobot/dcim/choices.py +28 -0
  170. nautobot/dcim/factory.py +58 -0
  171. nautobot/dcim/filters/__init__.py +204 -2
  172. nautobot/dcim/forms.py +221 -9
  173. nautobot/dcim/graphql/types.py +2 -2
  174. nautobot/dcim/migrations/0063_interfacevdcassignment_virtualdevicecontext_and_more.py +165 -0
  175. nautobot/dcim/migrations/0064_virtualdevicecontext_status_data_migration.py +28 -0
  176. nautobot/dcim/migrations/0065_controller_capabilities_and_more.py +29 -0
  177. nautobot/dcim/migrations/0066_controllermanageddevicegroup_radio_profiles_and_more.py +33 -0
  178. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +25 -0
  179. nautobot/dcim/models/__init__.py +5 -1
  180. nautobot/dcim/models/device_component_templates.py +2 -2
  181. nautobot/dcim/models/device_components.py +22 -20
  182. nautobot/dcim/models/devices.py +181 -3
  183. nautobot/dcim/models/locations.py +3 -3
  184. nautobot/dcim/models/power.py +6 -5
  185. nautobot/dcim/models/racks.py +6 -6
  186. nautobot/dcim/navigation.py +25 -224
  187. nautobot/dcim/signals.py +44 -0
  188. nautobot/dcim/tables/__init__.py +5 -3
  189. nautobot/dcim/tables/devices.py +103 -7
  190. nautobot/dcim/tables/devicetypes.py +2 -2
  191. nautobot/dcim/tables/racks.py +1 -1
  192. nautobot/dcim/templates/dcim/controller/base.html +10 -0
  193. nautobot/dcim/templates/dcim/controller_create.html +2 -7
  194. nautobot/dcim/templates/dcim/controller_retrieve.html +6 -10
  195. nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +25 -0
  196. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +68 -0
  197. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +51 -0
  198. nautobot/dcim/templates/dcim/device/base.html +6 -42
  199. nautobot/dcim/templates/dcim/device/wireless.html +73 -0
  200. nautobot/dcim/templates/dcim/device.html +4 -10
  201. nautobot/dcim/templates/dcim/device_edit.html +36 -37
  202. nautobot/dcim/templates/dcim/interface.html +1 -0
  203. nautobot/dcim/templates/dcim/interface_edit.html +1 -0
  204. nautobot/dcim/templates/dcim/location.html +1 -9
  205. nautobot/dcim/templates/dcim/location_edit.html +1 -7
  206. nautobot/dcim/templates/dcim/locationtype.html +0 -107
  207. nautobot/dcim/templates/dcim/locationtype_retrieve.html +8 -0
  208. nautobot/dcim/templates/dcim/rack.html +1 -9
  209. nautobot/dcim/templates/dcim/rack_edit.html +1 -7
  210. nautobot/dcim/templates/dcim/rackreservation.html +1 -9
  211. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +68 -0
  212. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +28 -0
  213. nautobot/dcim/tests/integration/test_controller.py +62 -0
  214. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +71 -0
  215. nautobot/dcim/tests/test_api.py +188 -64
  216. nautobot/dcim/tests/test_filters.py +172 -76
  217. nautobot/dcim/tests/test_graphql.py +52 -0
  218. nautobot/dcim/tests/test_jobs.py +118 -0
  219. nautobot/dcim/tests/test_models.py +159 -5
  220. nautobot/dcim/tests/test_signals.py +1 -0
  221. nautobot/dcim/tests/test_views.py +118 -88
  222. nautobot/dcim/urls.py +72 -27
  223. nautobot/dcim/utils.py +2 -2
  224. nautobot/dcim/views.py +357 -62
  225. nautobot/extras/api/customfields.py +2 -2
  226. nautobot/extras/api/serializers.py +111 -87
  227. nautobot/extras/api/urls.py +4 -0
  228. nautobot/extras/api/views.py +93 -35
  229. nautobot/extras/choices.py +13 -0
  230. nautobot/extras/constants.py +2 -1
  231. nautobot/extras/context_managers.py +23 -6
  232. nautobot/extras/datasources/git.py +4 -1
  233. nautobot/extras/factory.py +27 -0
  234. nautobot/extras/filters/__init__.py +66 -5
  235. nautobot/extras/forms/base.py +2 -2
  236. nautobot/extras/forms/forms.py +262 -59
  237. nautobot/extras/forms/mixins.py +3 -3
  238. nautobot/extras/graphql/types.py +25 -1
  239. nautobot/extras/health_checks.py +1 -2
  240. nautobot/extras/jobs.py +114 -20
  241. nautobot/extras/management/__init__.py +1 -0
  242. nautobot/extras/management/commands/runjob.py +7 -79
  243. nautobot/extras/management/commands/runjob_with_job_result.py +46 -0
  244. nautobot/extras/management/utils.py +87 -0
  245. nautobot/extras/managers.py +3 -1
  246. nautobot/extras/migrations/0018_joblog_data_migration.py +7 -9
  247. nautobot/extras/migrations/0117_create_job_queue_model.py +129 -0
  248. nautobot/extras/migrations/0118_task_queue_to_job_queue_migration.py +78 -0
  249. nautobot/extras/migrations/0119_remove_task_queues_from_job_and_queue_from_scheduled_job.py +28 -0
  250. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +22 -0
  251. nautobot/extras/migrations/0121_alter_team_contacts.py +17 -0
  252. nautobot/extras/models/__init__.py +5 -1
  253. nautobot/extras/models/change_logging.py +7 -3
  254. nautobot/extras/models/contacts.py +1 -1
  255. nautobot/extras/models/customfields.py +12 -11
  256. nautobot/extras/models/groups.py +11 -9
  257. nautobot/extras/models/jobs.py +237 -37
  258. nautobot/extras/models/models.py +2 -2
  259. nautobot/extras/models/relationships.py +69 -1
  260. nautobot/extras/models/secrets.py +5 -0
  261. nautobot/extras/navigation.py +20 -262
  262. nautobot/extras/plugins/__init__.py +54 -19
  263. nautobot/extras/plugins/marketplace_manifest.yml +455 -0
  264. nautobot/extras/plugins/tables.py +16 -14
  265. nautobot/extras/plugins/urls.py +1 -0
  266. nautobot/extras/plugins/views.py +104 -61
  267. nautobot/extras/registry.py +1 -1
  268. nautobot/extras/secrets/__init__.py +2 -2
  269. nautobot/extras/signals.py +39 -1
  270. nautobot/extras/tables.py +42 -6
  271. nautobot/extras/templates/extras/dynamicgroup.html +1 -9
  272. nautobot/extras/templates/extras/externalintegration_retrieve.html +0 -47
  273. nautobot/extras/templates/extras/inc/tags_panel.html +1 -5
  274. nautobot/extras/templates/extras/job_bulk_edit.html +2 -1
  275. nautobot/extras/templates/extras/job_detail.html +52 -6
  276. nautobot/extras/templates/extras/job_edit.html +6 -2
  277. nautobot/extras/templates/extras/job_list.html +2 -7
  278. nautobot/extras/templates/extras/jobqueue_retrieve.html +36 -0
  279. nautobot/extras/templates/extras/marketplace.html +296 -0
  280. nautobot/extras/templates/extras/plugin_detail.html +32 -15
  281. nautobot/extras/templates/extras/plugins_list.html +35 -1
  282. nautobot/extras/templates/extras/plugins_tiles.html +90 -0
  283. nautobot/extras/templates/extras/role_retrieve.html +16 -0
  284. nautobot/extras/templates/extras/secret.html +0 -65
  285. nautobot/extras/templates/extras/secret_check.js +16 -0
  286. nautobot/extras/templates/extras/secret_create.html +114 -0
  287. nautobot/extras/templates/extras/secret_edit.html +1 -114
  288. nautobot/extras/templates/extras/secretsgroup_edit.html +1 -1
  289. nautobot/extras/templates/extras/templatetags/plugin_object_detail_tabs.html +2 -0
  290. nautobot/extras/templatetags/job_buttons.py +5 -4
  291. nautobot/extras/templatetags/plugins.py +69 -6
  292. nautobot/extras/test_jobs/api_test_job.py +1 -1
  293. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  294. nautobot/extras/test_jobs/dry_run.py +1 -1
  295. nautobot/extras/test_jobs/fail.py +5 -5
  296. nautobot/extras/test_jobs/file_output.py +1 -1
  297. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  298. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  299. nautobot/extras/test_jobs/ipaddress_vars.py +3 -1
  300. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  301. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  302. nautobot/extras/test_jobs/log_redaction.py +1 -1
  303. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  304. nautobot/extras/test_jobs/modify_db.py +1 -1
  305. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  306. nautobot/extras/test_jobs/object_var_required.py +1 -1
  307. nautobot/extras/test_jobs/object_vars.py +1 -1
  308. nautobot/extras/test_jobs/pass.py +3 -3
  309. nautobot/extras/test_jobs/profiling.py +1 -1
  310. nautobot/extras/test_jobs/relative_import.py +3 -3
  311. nautobot/extras/test_jobs/singleton.py +16 -0
  312. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  313. nautobot/extras/test_jobs/task_queues.py +1 -1
  314. nautobot/extras/tests/integration/test_plugin_banner.py +0 -2
  315. nautobot/extras/tests/test_api.py +157 -55
  316. nautobot/extras/tests/test_context_managers.py +4 -1
  317. nautobot/extras/tests/test_customfields.py +1 -1
  318. nautobot/extras/tests/test_datasources.py +2 -1
  319. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  320. nautobot/extras/tests/test_filters.py +219 -535
  321. nautobot/extras/tests/test_forms.py +20 -1
  322. nautobot/extras/tests/test_job_variables.py +73 -152
  323. nautobot/extras/tests/test_jobs.py +192 -62
  324. nautobot/extras/tests/test_models.py +71 -16
  325. nautobot/extras/tests/test_plugins.py +62 -9
  326. nautobot/extras/tests/test_relationships.py +124 -10
  327. nautobot/extras/tests/test_utils.py +23 -2
  328. nautobot/extras/tests/test_views.py +162 -161
  329. nautobot/extras/tests/test_webhooks.py +2 -1
  330. nautobot/extras/urls.py +2 -20
  331. nautobot/extras/utils.py +119 -4
  332. nautobot/extras/views.py +188 -141
  333. nautobot/extras/webhooks.py +5 -2
  334. nautobot/ipam/api/fields.py +3 -3
  335. nautobot/ipam/api/serializers.py +44 -137
  336. nautobot/ipam/api/views.py +68 -110
  337. nautobot/ipam/factory.py +1 -1
  338. nautobot/ipam/filters.py +3 -2
  339. nautobot/ipam/models.py +10 -12
  340. nautobot/ipam/navigation.py +0 -90
  341. nautobot/ipam/querysets.py +2 -2
  342. nautobot/ipam/tables.py +3 -1
  343. nautobot/ipam/templates/ipam/ipaddress.html +1 -9
  344. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +1 -7
  345. nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -7
  346. nautobot/ipam/templates/ipam/prefix.html +1 -9
  347. nautobot/ipam/templates/ipam/prefix_edit.html +1 -7
  348. nautobot/ipam/templates/ipam/routetarget.html +0 -28
  349. nautobot/ipam/templates/ipam/vlan.html +1 -9
  350. nautobot/ipam/templates/ipam/vlan_edit.html +1 -7
  351. nautobot/ipam/templates/ipam/vrf.html +0 -47
  352. nautobot/ipam/templates/ipam/vrf_edit.html +1 -7
  353. nautobot/ipam/tests/test_api.py +19 -6
  354. nautobot/ipam/tests/test_filters.py +39 -119
  355. nautobot/ipam/tests/test_forms.py +49 -47
  356. nautobot/ipam/tests/test_migrations.py +30 -30
  357. nautobot/ipam/tests/test_models.py +56 -36
  358. nautobot/ipam/tests/test_querysets.py +14 -0
  359. nautobot/ipam/tests/test_views.py +3 -0
  360. nautobot/ipam/urls.py +3 -69
  361. nautobot/ipam/utils/__init__.py +16 -10
  362. nautobot/ipam/views.py +91 -162
  363. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  364. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  365. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +40 -2
  366. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  367. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  368. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  369. nautobot/project-static/css/base.css +38 -3
  370. nautobot/project-static/docs/404.html +463 -19
  371. nautobot/project-static/docs/apps/index.html +463 -19
  372. nautobot/project-static/docs/apps/nautobot-apps.html +464 -21
  373. nautobot/project-static/docs/assets/_mkdocstrings.css +25 -1
  374. nautobot/project-static/docs/assets/extra.css +5 -1
  375. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js → bundle.88dd0f4e.min.js} +2 -2
  376. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js.map → bundle.88dd0f4e.min.js.map} +2 -2
  377. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +479 -25
  378. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +476 -22
  379. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +792 -291
  380. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +507 -33
  381. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +512 -36
  382. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +473 -22
  383. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +469 -20
  384. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +499 -35
  385. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +9883 -0
  386. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +525 -77
  387. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +548 -53
  388. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +672 -96
  389. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +1033 -180
  390. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +526 -51
  391. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +876 -190
  392. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +957 -237
  393. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +477 -23
  394. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +488 -30
  395. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +663 -101
  396. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +949 -481
  397. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +6427 -1236
  398. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +476 -22
  399. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +879 -346
  400. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +830 -173
  401. nautobot/project-static/docs/development/apps/api/configuration-view.html +463 -19
  402. nautobot/project-static/docs/development/apps/api/database-backend-config.html +463 -19
  403. nautobot/project-static/docs/development/apps/api/models/django-admin.html +463 -19
  404. nautobot/project-static/docs/development/apps/api/models/global-search.html +463 -19
  405. nautobot/project-static/docs/development/apps/api/models/graphql.html +463 -19
  406. nautobot/project-static/docs/development/apps/api/models/index.html +463 -19
  407. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +463 -19
  408. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +463 -19
  409. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +463 -19
  410. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +463 -19
  411. nautobot/project-static/docs/development/apps/api/platform-features/index.html +463 -19
  412. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +463 -19
  413. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +463 -19
  414. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +463 -19
  415. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +463 -19
  416. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +463 -19
  417. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +463 -19
  418. nautobot/project-static/docs/development/apps/api/prometheus.html +463 -19
  419. nautobot/project-static/docs/development/apps/api/setup.html +467 -155
  420. nautobot/project-static/docs/development/apps/api/testing.html +463 -19
  421. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +463 -19
  422. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +463 -19
  423. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +463 -19
  424. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +463 -19
  425. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +743 -130
  426. nautobot/project-static/docs/development/apps/api/views/base-template.html +463 -19
  427. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +463 -19
  428. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +463 -19
  429. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +463 -19
  430. nautobot/project-static/docs/development/apps/api/views/index.html +465 -20
  431. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +467 -19
  432. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +493 -19
  433. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +463 -19
  434. nautobot/project-static/docs/development/apps/api/views/notes.html +463 -19
  435. nautobot/project-static/docs/development/apps/api/views/rest-api.html +469 -21
  436. nautobot/project-static/docs/development/apps/api/views/urls.html +463 -19
  437. nautobot/project-static/docs/development/apps/index.html +463 -19
  438. nautobot/project-static/docs/development/apps/migration/code-updates.html +464 -52
  439. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +464 -20
  440. nautobot/project-static/docs/development/apps/migration/from-v1.html +463 -19
  441. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +463 -19
  442. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +463 -19
  443. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +463 -19
  444. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +466 -22
  445. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +9261 -0
  446. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +9375 -0
  447. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +9671 -0
  448. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +9559 -0
  449. nautobot/project-static/docs/development/apps/porting-from-netbox.html +466 -22
  450. nautobot/project-static/docs/development/core/application-registry.html +463 -19
  451. nautobot/project-static/docs/development/core/best-practices.html +463 -19
  452. nautobot/project-static/docs/development/core/bootstrap-ui.html +463 -19
  453. nautobot/project-static/docs/development/core/caching.html +463 -19
  454. nautobot/project-static/docs/development/core/controllers.html +465 -19
  455. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +491 -90
  456. nautobot/project-static/docs/development/core/generic-views.html +463 -19
  457. nautobot/project-static/docs/development/core/getting-started.html +541 -129
  458. nautobot/project-static/docs/development/core/homepage.html +474 -30
  459. nautobot/project-static/docs/development/core/index.html +463 -19
  460. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9754 -0
  461. nautobot/project-static/docs/development/core/model-checklist.html +473 -27
  462. nautobot/project-static/docs/development/core/model-features.html +463 -19
  463. nautobot/project-static/docs/development/core/natural-keys.html +463 -19
  464. nautobot/project-static/docs/development/core/navigation-menu.html +480 -26
  465. nautobot/project-static/docs/development/core/release-checklist.html +480 -48
  466. nautobot/project-static/docs/development/core/role-internals.html +463 -19
  467. nautobot/project-static/docs/development/core/settings.html +463 -19
  468. nautobot/project-static/docs/development/core/style-guide.html +466 -22
  469. nautobot/project-static/docs/development/core/templates.html +473 -22
  470. nautobot/project-static/docs/development/core/testing.html +463 -19
  471. nautobot/project-static/docs/development/core/ui-component-framework.html +11116 -0
  472. nautobot/project-static/docs/development/core/user-preferences.html +466 -22
  473. nautobot/project-static/docs/development/index.html +463 -19
  474. nautobot/project-static/docs/development/jobs/index.html +501 -21
  475. nautobot/project-static/docs/development/jobs/migration/from-v1.html +463 -19
  476. nautobot/project-static/docs/index.html +471 -38
  477. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  478. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  479. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  480. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  481. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  482. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  483. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  484. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  485. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  486. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  487. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  488. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  489. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  490. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  491. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  492. nautobot/project-static/docs/media/development/core/ui-component-framework/basic-panel-layout.png +0 -0
  493. nautobot/project-static/docs/media/development/core/ui-component-framework/button-example.png +0 -0
  494. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  495. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  496. nautobot/project-static/docs/media/development/core/ui-component-framework/dropdown-button-example.png +0 -0
  497. nautobot/project-static/docs/media/development/core/ui-component-framework/grouped-key-value-table-panel-example-1.png +0 -0
  498. nautobot/project-static/docs/media/development/core/ui-component-framework/grouped-key-value-table-panel-example-2.png +0 -0
  499. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example.png +0 -0
  500. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  501. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  502. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example.png +0 -0
  503. nautobot/project-static/docs/media/development/core/ui-component-framework/table-panels-family.png +0 -0
  504. nautobot/project-static/docs/media/development/core/ui-component-framework/text-panels-family.png +0 -0
  505. nautobot/project-static/docs/media/development/core/ui-component-framework/ui-framework-example.png +0 -0
  506. nautobot/project-static/docs/media/models/virtual_device_context_overview.drawio +73 -0
  507. nautobot/project-static/docs/media/models/virtual_device_context_overview.png +0 -0
  508. nautobot/project-static/docs/models/dcim/virtualdevicecontext.html +14 -0
  509. nautobot/project-static/docs/models/extras/jobqueue.html +14 -0
  510. nautobot/project-static/docs/models/wireless/radioprofile.html +14 -0
  511. nautobot/project-static/docs/models/wireless/supporteddatarate.html +14 -0
  512. nautobot/project-static/docs/models/wireless/wirelessnetwork.html +14 -0
  513. nautobot/project-static/docs/objects.inv +0 -0
  514. nautobot/project-static/docs/overview/application_stack.html +469 -23
  515. nautobot/project-static/docs/overview/design_philosophy.html +463 -19
  516. nautobot/project-static/docs/release-notes/index.html +485 -22
  517. nautobot/project-static/docs/release-notes/version-1.0.html +651 -208
  518. nautobot/project-static/docs/release-notes/version-1.1.html +648 -205
  519. nautobot/project-static/docs/release-notes/version-1.2.html +723 -280
  520. nautobot/project-static/docs/release-notes/version-1.3.html +749 -306
  521. nautobot/project-static/docs/release-notes/version-1.4.html +834 -392
  522. nautobot/project-static/docs/release-notes/version-1.5.html +1022 -581
  523. nautobot/project-static/docs/release-notes/version-1.6.html +942 -518
  524. nautobot/project-static/docs/release-notes/version-2.0.html +945 -504
  525. nautobot/project-static/docs/release-notes/version-2.1.html +780 -339
  526. nautobot/project-static/docs/release-notes/version-2.2.html +773 -332
  527. nautobot/project-static/docs/release-notes/version-2.3.html +1142 -448
  528. nautobot/project-static/docs/release-notes/version-2.4.html +10323 -0
  529. nautobot/project-static/docs/requirements.txt +2 -2
  530. nautobot/project-static/docs/search/search_index.json +1 -1
  531. nautobot/project-static/docs/sitemap.xml +342 -270
  532. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  533. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +463 -19
  534. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +463 -19
  535. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +463 -19
  536. nautobot/project-static/docs/user-guide/administration/configuration/index.html +475 -32
  537. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +463 -19
  538. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +894 -180
  539. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +463 -19
  540. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +463 -19
  541. nautobot/project-static/docs/user-guide/administration/guides/docker.html +476 -29
  542. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +463 -19
  543. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +463 -19
  544. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +463 -19
  545. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +463 -19
  546. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +463 -19
  547. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +465 -21
  548. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +463 -19
  549. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +463 -19
  550. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +463 -19
  551. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +483 -23
  552. nautobot/project-static/docs/user-guide/administration/installation/index.html +468 -20
  553. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +464 -20
  554. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +463 -19
  555. nautobot/project-static/docs/user-guide/administration/installation/services.html +463 -19
  556. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +463 -19
  557. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +484 -41
  558. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +477 -66
  559. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +477 -66
  560. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +463 -19
  561. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +463 -19
  562. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +463 -19
  563. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +463 -19
  564. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +463 -19
  565. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +466 -23
  566. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +463 -19
  567. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/tables/v2-code-nautobot-app-location.yaml +0 -16
  568. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +463 -19
  569. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +469 -21
  570. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +463 -19
  571. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +463 -19
  572. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +463 -19
  573. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +463 -19
  574. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +463 -19
  575. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +463 -19
  576. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +463 -19
  577. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +463 -19
  578. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +463 -19
  579. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +463 -19
  580. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +463 -19
  581. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +463 -19
  582. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +463 -19
  583. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +463 -19
  584. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +463 -19
  585. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +463 -19
  586. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +463 -19
  587. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +499 -20
  588. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +489 -22
  589. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +463 -19
  590. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +463 -19
  591. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +463 -19
  592. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +463 -19
  593. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +463 -19
  594. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +463 -19
  595. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +463 -19
  596. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +463 -19
  597. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +463 -19
  598. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +463 -19
  599. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +463 -19
  600. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +463 -19
  601. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +463 -19
  602. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +463 -19
  603. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +463 -19
  604. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +463 -19
  605. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +463 -19
  606. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +463 -19
  607. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +463 -19
  608. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +463 -19
  609. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +463 -19
  610. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +463 -19
  611. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +463 -19
  612. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +463 -19
  613. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +463 -19
  614. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +463 -19
  615. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +463 -19
  616. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +463 -19
  617. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +463 -19
  618. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +463 -19
  619. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +463 -19
  620. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +463 -19
  621. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +463 -19
  622. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +463 -19
  623. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +9375 -0
  624. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +470 -30
  625. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +463 -19
  626. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +463 -19
  627. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +463 -19
  628. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +463 -19
  629. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +463 -19
  630. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +463 -19
  631. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +463 -19
  632. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +463 -19
  633. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +463 -19
  634. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +463 -19
  635. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +463 -19
  636. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +463 -19
  637. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +466 -22
  638. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +463 -19
  639. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +463 -19
  640. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +463 -19
  641. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +463 -19
  642. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +463 -19
  643. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +463 -19
  644. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +466 -22
  645. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +9313 -0
  646. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +9217 -0
  647. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +9211 -0
  648. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +9277 -0
  649. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +463 -19
  650. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +463 -19
  651. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +463 -19
  652. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +463 -19
  653. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +463 -19
  654. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +463 -19
  655. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +463 -19
  656. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +463 -19
  657. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +463 -19
  658. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +463 -19
  659. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +463 -19
  660. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +468 -22
  661. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +463 -19
  662. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  663. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  664. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  665. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  666. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  667. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  668. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  669. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  670. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  671. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  672. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  673. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  674. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  675. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +463 -19
  676. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +463 -19
  677. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +466 -22
  678. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9444 -0
  679. nautobot/project-static/docs/user-guide/index.html +463 -19
  680. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +466 -22
  681. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +467 -23
  682. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +463 -19
  683. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +463 -19
  684. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +463 -19
  685. nautobot/project-static/docs/user-guide/platform-functionality/events.html +9617 -0
  686. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +466 -22
  687. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +463 -19
  688. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +463 -19
  689. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +463 -19
  690. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +463 -19
  691. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +463 -19
  692. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +472 -23
  693. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +466 -22
  694. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +466 -22
  695. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +463 -19
  696. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +9224 -0
  697. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9722 -0
  698. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +466 -22
  699. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +463 -19
  700. nautobot/project-static/docs/user-guide/platform-functionality/note.html +463 -19
  701. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +463 -19
  702. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +467 -23
  703. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +9292 -0
  704. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +463 -19
  705. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +511 -40
  706. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +494 -23
  707. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +463 -19
  708. nautobot/project-static/docs/user-guide/platform-functionality/role.html +463 -19
  709. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +463 -19
  710. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +463 -19
  711. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +466 -22
  712. nautobot/project-static/docs/user-guide/platform-functionality/status.html +463 -19
  713. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +463 -19
  714. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +531 -56
  715. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +463 -19
  716. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +463 -19
  717. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +463 -19
  718. nautobot/project-static/img/jinja_logo.svg +97 -0
  719. nautobot/project-static/js/forms.js +6 -1
  720. nautobot/project-static/js/nav_menu.js +2 -1
  721. nautobot/tenancy/api/serializers.py +0 -2
  722. nautobot/tenancy/api/views.py +9 -13
  723. nautobot/tenancy/factory.py +1 -1
  724. nautobot/tenancy/navigation.py +0 -29
  725. nautobot/tenancy/templates/tenancy/tenant.html +4 -91
  726. nautobot/tenancy/tests/test_filters.py +29 -134
  727. nautobot/tenancy/views.py +35 -24
  728. nautobot/users/admin.py +3 -1
  729. nautobot/users/api/serializers.py +4 -4
  730. nautobot/users/api/views.py +3 -3
  731. nautobot/users/forms.py +19 -0
  732. nautobot/users/templates/users/preferences.html +22 -0
  733. nautobot/users/tests/test_filters.py +1 -19
  734. nautobot/users/tests/test_views.py +57 -0
  735. nautobot/users/utils.py +8 -0
  736. nautobot/users/views.py +48 -11
  737. nautobot/virtualization/api/serializers.py +4 -4
  738. nautobot/virtualization/api/views.py +5 -24
  739. nautobot/virtualization/filters.py +1 -2
  740. nautobot/virtualization/models.py +1 -1
  741. nautobot/virtualization/navigation.py +0 -48
  742. nautobot/virtualization/tables.py +2 -2
  743. nautobot/virtualization/templates/virtualization/cluster_edit.html +1 -7
  744. nautobot/virtualization/templates/virtualization/clustertype.html +0 -39
  745. nautobot/virtualization/templates/virtualization/virtualmachine.html +1 -9
  746. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -8
  747. nautobot/virtualization/tests/test_filters.py +57 -166
  748. nautobot/virtualization/views.py +18 -15
  749. nautobot/wireless/__init__.py +0 -0
  750. nautobot/wireless/api/__init__.py +0 -0
  751. nautobot/wireless/api/serializers.py +44 -0
  752. nautobot/wireless/api/urls.py +20 -0
  753. nautobot/wireless/api/views.py +34 -0
  754. nautobot/wireless/apps.py +8 -0
  755. nautobot/wireless/choices.py +345 -0
  756. nautobot/wireless/factory.py +138 -0
  757. nautobot/wireless/filters.py +167 -0
  758. nautobot/wireless/forms.py +283 -0
  759. nautobot/wireless/homepage.py +19 -0
  760. nautobot/wireless/migrations/0001_initial.py +223 -0
  761. nautobot/wireless/migrations/__init__.py +0 -0
  762. nautobot/wireless/models.py +207 -0
  763. nautobot/wireless/navigation.py +105 -0
  764. nautobot/wireless/tables.py +244 -0
  765. nautobot/wireless/templates/wireless/radioprofile_retrieve.html +81 -0
  766. nautobot/wireless/templates/wireless/supporteddatarate_retrieve.html +26 -0
  767. nautobot/wireless/templates/wireless/wirelessnetwork_create.html +88 -0
  768. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +56 -0
  769. nautobot/wireless/tests/__init__.py +0 -0
  770. nautobot/wireless/tests/integration/__init__.py +0 -0
  771. nautobot/wireless/tests/integration/test_radio_profile.py +42 -0
  772. nautobot/wireless/tests/test_api.py +247 -0
  773. nautobot/wireless/tests/test_filters.py +82 -0
  774. nautobot/wireless/tests/test_models.py +22 -0
  775. nautobot/wireless/tests/test_views.py +378 -0
  776. nautobot/wireless/urls.py +13 -0
  777. nautobot/wireless/views.py +119 -0
  778. {nautobot-2.3.15b1.dist-info → nautobot-2.4.0.dist-info}/METADATA +11 -13
  779. {nautobot-2.3.15b1.dist-info → nautobot-2.4.0.dist-info}/RECORD +783 -613
  780. {nautobot-2.3.15b1.dist-info → nautobot-2.4.0.dist-info}/WHEEL +1 -1
  781. nautobot/core/fixtures/user-data.json +0 -59
  782. nautobot/core/utils/navigation.py +0 -54
  783. {nautobot-2.3.15b1.dist-info → nautobot-2.4.0.dist-info}/LICENSE.txt +0 -0
  784. {nautobot-2.3.15b1.dist-info → nautobot-2.4.0.dist-info}/NOTICE +0 -0
  785. {nautobot-2.3.15b1.dist-info → nautobot-2.4.0.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.48">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
22
22
 
23
23
 
24
24
 
@@ -2112,6 +2112,27 @@
2112
2112
 
2113
2113
 
2114
2114
 
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+ <li class="md-nav__item">
2122
+ <a href="../../../user-guide/feature-guides/wireless-networks-and-controllers.html" class="md-nav__link">
2123
+
2124
+
2125
+ <span class="md-ellipsis">
2126
+ Wireless Networks and Controllers
2127
+ </span>
2128
+
2129
+
2130
+ </a>
2131
+ </li>
2132
+
2133
+
2134
+
2135
+
2115
2136
  </ul>
2116
2137
  </nav>
2117
2138
 
@@ -3944,6 +3965,27 @@
3944
3965
 
3945
3966
 
3946
3967
 
3968
+
3969
+
3970
+
3971
+
3972
+
3973
+
3974
+ <li class="md-nav__item">
3975
+ <a href="../../../user-guide/core-data-model/dcim/virtualdevicecontext.html" class="md-nav__link">
3976
+
3977
+
3978
+ <span class="md-ellipsis">
3979
+ Virtual Device Context
3980
+ </span>
3981
+
3982
+
3983
+ </a>
3984
+ </li>
3985
+
3986
+
3987
+
3988
+
3947
3989
  </ul>
3948
3990
  </nav>
3949
3991
 
@@ -4556,6 +4598,123 @@
4556
4598
 
4557
4599
 
4558
4600
 
4601
+
4602
+
4603
+
4604
+
4605
+
4606
+
4607
+
4608
+
4609
+
4610
+
4611
+
4612
+
4613
+
4614
+ <li class="md-nav__item md-nav__item--nested">
4615
+
4616
+
4617
+
4618
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_9" >
4619
+
4620
+
4621
+
4622
+ <div class="md-nav__link md-nav__container">
4623
+ <a href="../../../user-guide/core-data-model/wireless/index.html" class="md-nav__link ">
4624
+
4625
+
4626
+ <span class="md-ellipsis">
4627
+ Wireless
4628
+ </span>
4629
+
4630
+
4631
+ </a>
4632
+
4633
+
4634
+ <label class="md-nav__link " for="__nav_2_3_9" id="__nav_2_3_9_label" tabindex="0">
4635
+ <span class="md-nav__icon md-icon"></span>
4636
+ </label>
4637
+
4638
+ </div>
4639
+
4640
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_9_label" aria-expanded="false">
4641
+ <label class="md-nav__title" for="__nav_2_3_9">
4642
+ <span class="md-nav__icon md-icon"></span>
4643
+ Wireless
4644
+ </label>
4645
+ <ul class="md-nav__list" data-md-scrollfix>
4646
+
4647
+
4648
+
4649
+
4650
+
4651
+
4652
+
4653
+ <li class="md-nav__item">
4654
+ <a href="../../../user-guide/core-data-model/wireless/supporteddatarate.html" class="md-nav__link">
4655
+
4656
+
4657
+ <span class="md-ellipsis">
4658
+ Supported Data Rate
4659
+ </span>
4660
+
4661
+
4662
+ </a>
4663
+ </li>
4664
+
4665
+
4666
+
4667
+
4668
+
4669
+
4670
+
4671
+
4672
+
4673
+
4674
+ <li class="md-nav__item">
4675
+ <a href="../../../user-guide/core-data-model/wireless/radioprofile.html" class="md-nav__link">
4676
+
4677
+
4678
+ <span class="md-ellipsis">
4679
+ Radio Profile
4680
+ </span>
4681
+
4682
+
4683
+ </a>
4684
+ </li>
4685
+
4686
+
4687
+
4688
+
4689
+
4690
+
4691
+
4692
+
4693
+
4694
+
4695
+ <li class="md-nav__item">
4696
+ <a href="../../../user-guide/core-data-model/wireless/wirelessnetwork.html" class="md-nav__link">
4697
+
4698
+
4699
+ <span class="md-ellipsis">
4700
+ Wireless Network
4701
+ </span>
4702
+
4703
+
4704
+ </a>
4705
+ </li>
4706
+
4707
+
4708
+
4709
+
4710
+ </ul>
4711
+ </nav>
4712
+
4713
+ </li>
4714
+
4715
+
4716
+
4717
+
4559
4718
  </ul>
4560
4719
  </nav>
4561
4720
 
@@ -4767,6 +4926,27 @@
4767
4926
 
4768
4927
 
4769
4928
 
4929
+ <li class="md-nav__item">
4930
+ <a href="../../../user-guide/platform-functionality/events.html" class="md-nav__link">
4931
+
4932
+
4933
+ <span class="md-ellipsis">
4934
+ Event Notifications
4935
+ </span>
4936
+
4937
+
4938
+ </a>
4939
+ </li>
4940
+
4941
+
4942
+
4943
+
4944
+
4945
+
4946
+
4947
+
4948
+
4949
+
4770
4950
  <li class="md-nav__item">
4771
4951
  <a href="../../../user-guide/platform-functionality/exporttemplate.html" class="md-nav__link">
4772
4952
 
@@ -4841,7 +5021,7 @@
4841
5021
 
4842
5022
 
4843
5023
 
4844
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_9" >
5024
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_10" >
4845
5025
 
4846
5026
 
4847
5027
 
@@ -4857,14 +5037,14 @@
4857
5037
  </a>
4858
5038
 
4859
5039
 
4860
- <label class="md-nav__link " for="__nav_2_4_9" id="__nav_2_4_9_label" tabindex="0">
5040
+ <label class="md-nav__link " for="__nav_2_4_10" id="__nav_2_4_10_label" tabindex="0">
4861
5041
  <span class="md-nav__icon md-icon"></span>
4862
5042
  </label>
4863
5043
 
4864
5044
  </div>
4865
5045
 
4866
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_9_label" aria-expanded="false">
4867
- <label class="md-nav__title" for="__nav_2_4_9">
5046
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_10_label" aria-expanded="false">
5047
+ <label class="md-nav__title" for="__nav_2_4_10">
4868
5048
  <span class="md-nav__icon md-icon"></span>
4869
5049
  GraphQL
4870
5050
  </label>
@@ -4937,7 +5117,7 @@
4937
5117
 
4938
5118
 
4939
5119
 
4940
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_11" >
5120
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_12" >
4941
5121
 
4942
5122
 
4943
5123
 
@@ -4953,14 +5133,14 @@
4953
5133
  </a>
4954
5134
 
4955
5135
 
4956
- <label class="md-nav__link " for="__nav_2_4_11" id="__nav_2_4_11_label" tabindex="0">
5136
+ <label class="md-nav__link " for="__nav_2_4_12" id="__nav_2_4_12_label" tabindex="0">
4957
5137
  <span class="md-nav__icon md-icon"></span>
4958
5138
  </label>
4959
5139
 
4960
5140
  </div>
4961
5141
 
4962
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_11_label" aria-expanded="false">
4963
- <label class="md-nav__title" for="__nav_2_4_11">
5142
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_12_label" aria-expanded="false">
5143
+ <label class="md-nav__title" for="__nav_2_4_12">
4964
5144
  <span class="md-nav__icon md-icon"></span>
4965
5145
  Jobs
4966
5146
  </label>
@@ -4972,6 +5152,27 @@
4972
5152
 
4973
5153
 
4974
5154
 
5155
+ <li class="md-nav__item">
5156
+ <a href="../../../user-guide/platform-functionality/jobs/kubernetes-job-support.html" class="md-nav__link">
5157
+
5158
+
5159
+ <span class="md-ellipsis">
5160
+ Kubernetes Job Support
5161
+ </span>
5162
+
5163
+
5164
+ </a>
5165
+ </li>
5166
+
5167
+
5168
+
5169
+
5170
+
5171
+
5172
+
5173
+
5174
+
5175
+
4975
5176
  <li class="md-nav__item">
4976
5177
  <a href="../../../user-guide/platform-functionality/jobs/jobbutton.html" class="md-nav__link">
4977
5178
 
@@ -5035,6 +5236,27 @@
5035
5236
 
5036
5237
 
5037
5238
 
5239
+ <li class="md-nav__item">
5240
+ <a href="../../../user-guide/platform-functionality/jobs/jobqueue.html" class="md-nav__link">
5241
+
5242
+
5243
+ <span class="md-ellipsis">
5244
+ Job Queues
5245
+ </span>
5246
+
5247
+
5248
+ </a>
5249
+ </li>
5250
+
5251
+
5252
+
5253
+
5254
+
5255
+
5256
+
5257
+
5258
+
5259
+
5038
5260
  <li class="md-nav__item">
5039
5261
  <a href="../../../user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html" class="md-nav__link">
5040
5262
 
@@ -5148,6 +5370,27 @@
5148
5370
 
5149
5371
 
5150
5372
 
5373
+ <li class="md-nav__item">
5374
+ <a href="../../../user-guide/platform-functionality/rendering-jinja-templates.html" class="md-nav__link">
5375
+
5376
+
5377
+ <span class="md-ellipsis">
5378
+ Rendering Jinja Templates
5379
+ </span>
5380
+
5381
+
5382
+ </a>
5383
+ </li>
5384
+
5385
+
5386
+
5387
+
5388
+
5389
+
5390
+
5391
+
5392
+
5393
+
5151
5394
 
5152
5395
 
5153
5396
 
@@ -5159,7 +5402,7 @@
5159
5402
 
5160
5403
 
5161
5404
 
5162
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_16" >
5405
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_18" >
5163
5406
 
5164
5407
 
5165
5408
 
@@ -5175,14 +5418,14 @@
5175
5418
  </a>
5176
5419
 
5177
5420
 
5178
- <label class="md-nav__link " for="__nav_2_4_16" id="__nav_2_4_16_label" tabindex="0">
5421
+ <label class="md-nav__link " for="__nav_2_4_18" id="__nav_2_4_18_label" tabindex="0">
5179
5422
  <span class="md-nav__icon md-icon"></span>
5180
5423
  </label>
5181
5424
 
5182
5425
  </div>
5183
5426
 
5184
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_16_label" aria-expanded="false">
5185
- <label class="md-nav__title" for="__nav_2_4_16">
5427
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_18_label" aria-expanded="false">
5428
+ <label class="md-nav__title" for="__nav_2_4_18">
5186
5429
  <span class="md-nav__icon md-icon"></span>
5187
5430
  REST API
5188
5431
  </label>
@@ -5402,10 +5645,10 @@
5402
5645
 
5403
5646
 
5404
5647
 
5405
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_23" >
5648
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_25" >
5406
5649
 
5407
5650
 
5408
- <label class="md-nav__link" for="__nav_2_4_23" id="__nav_2_4_23_label" tabindex="0">
5651
+ <label class="md-nav__link" for="__nav_2_4_25" id="__nav_2_4_25_label" tabindex="0">
5409
5652
 
5410
5653
 
5411
5654
  <span class="md-ellipsis">
@@ -5416,8 +5659,8 @@
5416
5659
  <span class="md-nav__icon md-icon"></span>
5417
5660
  </label>
5418
5661
 
5419
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_23_label" aria-expanded="false">
5420
- <label class="md-nav__title" for="__nav_2_4_23">
5662
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_25_label" aria-expanded="false">
5663
+ <label class="md-nav__title" for="__nav_2_4_25">
5421
5664
  <span class="md-nav__icon md-icon"></span>
5422
5665
  Users
5423
5666
  </label>
@@ -6831,6 +7074,27 @@
6831
7074
 
6832
7075
 
6833
7076
 
7077
+ <li class="md-nav__item">
7078
+ <a href="events.html" class="md-nav__link">
7079
+
7080
+
7081
+ <span class="md-ellipsis">
7082
+ nautobot.apps.events
7083
+ </span>
7084
+
7085
+
7086
+ </a>
7087
+ </li>
7088
+
7089
+
7090
+
7091
+
7092
+
7093
+
7094
+
7095
+
7096
+
7097
+
6834
7098
  <li class="md-nav__item">
6835
7099
  <a href="exceptions.html" class="md-nav__link">
6836
7100
 
@@ -6989,6 +7253,21 @@
6989
7253
  </span>
6990
7254
  </a>
6991
7255
 
7256
+ <nav class="md-nav" aria-label="BulkEditForm">
7257
+ <ul class="md-nav__list">
7258
+
7259
+ <li class="md-nav__item">
7260
+ <a href="#nautobot.apps.forms.BulkEditForm.post_save" class="md-nav__link">
7261
+ <span class="md-ellipsis">
7262
+ post_save
7263
+ </span>
7264
+ </a>
7265
+
7266
+ </li>
7267
+
7268
+ </ul>
7269
+ </nav>
7270
+
6992
7271
  </li>
6993
7272
 
6994
7273
  <li class="md-nav__item">
@@ -7386,6 +7665,15 @@
7386
7665
  </span>
7387
7666
  </a>
7388
7667
 
7668
+ </li>
7669
+
7670
+ <li class="md-nav__item">
7671
+ <a href="#nautobot.apps.forms.JSONArrayFormField.valid_value" class="md-nav__link">
7672
+ <span class="md-ellipsis">
7673
+ valid_value
7674
+ </span>
7675
+ </a>
7676
+
7389
7677
  </li>
7390
7678
 
7391
7679
  <li class="md-nav__item">
@@ -8283,6 +8571,123 @@
8283
8571
 
8284
8572
 
8285
8573
 
8574
+
8575
+
8576
+
8577
+
8578
+
8579
+
8580
+
8581
+
8582
+
8583
+
8584
+
8585
+
8586
+
8587
+ <li class="md-nav__item md-nav__item--nested">
8588
+
8589
+
8590
+
8591
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_9_5" >
8592
+
8593
+
8594
+
8595
+ <div class="md-nav__link md-nav__container">
8596
+ <a href="../../../development/apps/migration/ui-component-framework/index.html" class="md-nav__link ">
8597
+
8598
+
8599
+ <span class="md-ellipsis">
8600
+ UI Component Framework
8601
+ </span>
8602
+
8603
+
8604
+ </a>
8605
+
8606
+
8607
+ <label class="md-nav__link " for="__nav_3_2_9_5" id="__nav_3_2_9_5_label" tabindex="0">
8608
+ <span class="md-nav__icon md-icon"></span>
8609
+ </label>
8610
+
8611
+ </div>
8612
+
8613
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_2_9_5_label" aria-expanded="false">
8614
+ <label class="md-nav__title" for="__nav_3_2_9_5">
8615
+ <span class="md-nav__icon md-icon"></span>
8616
+ UI Component Framework
8617
+ </label>
8618
+ <ul class="md-nav__list" data-md-scrollfix>
8619
+
8620
+
8621
+
8622
+
8623
+
8624
+
8625
+
8626
+ <li class="md-nav__item">
8627
+ <a href="../../../development/apps/migration/ui-component-framework/migration-steps.html" class="md-nav__link">
8628
+
8629
+
8630
+ <span class="md-ellipsis">
8631
+ Migration steps
8632
+ </span>
8633
+
8634
+
8635
+ </a>
8636
+ </li>
8637
+
8638
+
8639
+
8640
+
8641
+
8642
+
8643
+
8644
+
8645
+
8646
+
8647
+ <li class="md-nav__item">
8648
+ <a href="../../../development/apps/migration/ui-component-framework/custom-content.html" class="md-nav__link">
8649
+
8650
+
8651
+ <span class="md-ellipsis">
8652
+ Custom content
8653
+ </span>
8654
+
8655
+
8656
+ </a>
8657
+ </li>
8658
+
8659
+
8660
+
8661
+
8662
+
8663
+
8664
+
8665
+
8666
+
8667
+
8668
+ <li class="md-nav__item">
8669
+ <a href="../../../development/apps/migration/ui-component-framework/best-practices.html" class="md-nav__link">
8670
+
8671
+
8672
+ <span class="md-ellipsis">
8673
+ Best practices
8674
+ </span>
8675
+
8676
+
8677
+ </a>
8678
+ </li>
8679
+
8680
+
8681
+
8682
+
8683
+ </ul>
8684
+ </nav>
8685
+
8686
+ </li>
8687
+
8688
+
8689
+
8690
+
8286
8691
  </ul>
8287
8692
  </nav>
8288
8693
 
@@ -8628,6 +9033,27 @@
8628
9033
 
8629
9034
 
8630
9035
 
9036
+ <li class="md-nav__item">
9037
+ <a href="../../../development/core/minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link">
9038
+
9039
+
9040
+ <span class="md-ellipsis">
9041
+ Minikube Dev Environment for K8s Jobs
9042
+ </span>
9043
+
9044
+
9045
+ </a>
9046
+ </li>
9047
+
9048
+
9049
+
9050
+
9051
+
9052
+
9053
+
9054
+
9055
+
9056
+
8631
9057
  <li class="md-nav__item">
8632
9058
  <a href="../../../development/core/model-checklist.html" class="md-nav__link">
8633
9059
 
@@ -8817,6 +9243,27 @@
8817
9243
 
8818
9244
 
8819
9245
 
9246
+ <li class="md-nav__item">
9247
+ <a href="../../../development/core/ui-component-framework.html" class="md-nav__link">
9248
+
9249
+
9250
+ <span class="md-ellipsis">
9251
+ UI Component Framework
9252
+ </span>
9253
+
9254
+
9255
+ </a>
9256
+ </li>
9257
+
9258
+
9259
+
9260
+
9261
+
9262
+
9263
+
9264
+
9265
+
9266
+
8820
9267
  <li class="md-nav__item">
8821
9268
  <a href="../../../development/core/release-checklist.html" class="md-nav__link">
8822
9269
 
@@ -8899,6 +9346,27 @@
8899
9346
 
8900
9347
 
8901
9348
 
9349
+ <li class="md-nav__item">
9350
+ <a href="../../../release-notes/version-2.4.html" class="md-nav__link">
9351
+
9352
+
9353
+ <span class="md-ellipsis">
9354
+ Version 2.4
9355
+ </span>
9356
+
9357
+
9358
+ </a>
9359
+ </li>
9360
+
9361
+
9362
+
9363
+
9364
+
9365
+
9366
+
9367
+
9368
+
9369
+
8902
9370
  <li class="md-nav__item">
8903
9371
  <a href="../../../release-notes/version-2.3.html" class="md-nav__link">
8904
9372
 
@@ -9535,6 +10003,21 @@
9535
10003
  </span>
9536
10004
  </a>
9537
10005
 
10006
+ <nav class="md-nav" aria-label="BulkEditForm">
10007
+ <ul class="md-nav__list">
10008
+
10009
+ <li class="md-nav__item">
10010
+ <a href="#nautobot.apps.forms.BulkEditForm.post_save" class="md-nav__link">
10011
+ <span class="md-ellipsis">
10012
+ post_save
10013
+ </span>
10014
+ </a>
10015
+
10016
+ </li>
10017
+
10018
+ </ul>
10019
+ </nav>
10020
+
9538
10021
  </li>
9539
10022
 
9540
10023
  <li class="md-nav__item">
@@ -9932,6 +10415,15 @@
9932
10415
  </span>
9933
10416
  </a>
9934
10417
 
10418
+ </li>
10419
+
10420
+ <li class="md-nav__item">
10421
+ <a href="#nautobot.apps.forms.JSONArrayFormField.valid_value" class="md-nav__link">
10422
+ <span class="md-ellipsis">
10423
+ valid_value
10424
+ </span>
10425
+ </a>
10426
+
9935
10427
  </li>
9936
10428
 
9937
10429
  <li class="md-nav__item">
@@ -10380,7 +10872,12 @@
10380
10872
 
10381
10873
  <div class="doc doc-contents first">
10382
10874
 
10383
- <p>Forms and fields for apps to use.</p>
10875
+ <p>Forms and fields for apps to use.</p>
10876
+
10877
+
10878
+
10879
+
10880
+
10384
10881
 
10385
10882
 
10386
10883
 
@@ -10406,10 +10903,10 @@
10406
10903
 
10407
10904
  <div class="doc doc-contents ">
10408
10905
  <p class="doc doc-class-bases">
10409
- Bases: <code><autoref identifier="nautobot.core.forms.widgets.SelectWithDisabled" optional hover>SelectWithDisabled</autoref></code></p>
10906
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.widgets.SelectWithDisabled" href="#nautobot.apps.forms.SelectWithDisabled">SelectWithDisabled</a></code></p>
10410
10907
 
10411
10908
 
10412
- <p>A select widget populated via an API call</p>
10909
+ <p>A select widget populated via an API call</p>
10413
10910
 
10414
10911
 
10415
10912
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -10424,9 +10921,11 @@
10424
10921
  </thead>
10425
10922
  <tbody>
10426
10923
  <tr class="doc-section-item">
10427
- <td><code>api_url</code></td>
10428
10924
  <td>
10429
- <code><autoref identifier="str" optional>str</autoref></code>
10925
+ <code>api_url</code>
10926
+ </td>
10927
+ <td>
10928
+ <code>str</code>
10430
10929
  </td>
10431
10930
  <td>
10432
10931
  <div class="doc-md-description">
@@ -10438,9 +10937,11 @@
10438
10937
  </td>
10439
10938
  </tr>
10440
10939
  <tr class="doc-section-item">
10441
- <td><code>api_version</code></td>
10442
10940
  <td>
10443
- <code><autoref identifier="str" optional>str</autoref></code>
10941
+ <code>api_version</code>
10942
+ </td>
10943
+ <td>
10944
+ <code>str</code>
10444
10945
  </td>
10445
10946
  <td>
10446
10947
  <div class="doc-md-description">
@@ -10457,6 +10958,11 @@
10457
10958
 
10458
10959
 
10459
10960
 
10961
+
10962
+
10963
+
10964
+
10965
+
10460
10966
  <div class="doc doc-children">
10461
10967
 
10462
10968
 
@@ -10478,7 +10984,7 @@
10478
10984
 
10479
10985
  <div class="doc doc-contents ">
10480
10986
 
10481
- <p>Add details for an additional query param in the form of a data-* JSON-encoded list attribute.</p>
10987
+ <p>Add details for an additional query param in the form of a data-* JSON-encoded list attribute.</p>
10482
10988
  <p>:param name: The name of the query param
10483
10989
  :param value: The value of the query param</p>
10484
10990
 
@@ -10507,10 +11013,15 @@
10507
11013
 
10508
11014
  <div class="doc doc-contents ">
10509
11015
  <p class="doc doc-class-bases">
10510
- Bases: <code><autoref identifier="django.forms.ModelForm" optional hover>ModelForm</autoref></code></p>
11016
+ Bases: <code><span title="django.forms.ModelForm">ModelForm</span></code></p>
11017
+
11018
+
11019
+ <p>ModelForm mixin for IPAddress based models.</p>
11020
+
11021
+
11022
+
10511
11023
 
10512
11024
 
10513
- <p>ModelForm mixin for IPAddress based models.</p>
10514
11025
 
10515
11026
 
10516
11027
 
@@ -10546,10 +11057,10 @@
10546
11057
 
10547
11058
  <div class="doc doc-contents ">
10548
11059
  <p class="doc doc-class-bases">
10549
- Bases: <code><autoref identifier="django.forms.BaseForm" optional hover>BaseForm</autoref></code></p>
11060
+ Bases: <code><span title="django.forms.BaseForm">BaseForm</span></code></p>
10550
11061
 
10551
11062
 
10552
- <p>Add the base Bootstrap CSS classes to form elements.</p>
11063
+ <p>Add the base Bootstrap CSS classes to form elements.</p>
10553
11064
  <p>Note that this only applies to form fields that are:</p>
10554
11065
  <ol>
10555
11066
  <li>statically defined on the form class at declaration time, or</li>
@@ -10560,6 +11071,11 @@
10560
11071
 
10561
11072
 
10562
11073
 
11074
+
11075
+
11076
+
11077
+
11078
+
10563
11079
  <div class="doc doc-children">
10564
11080
 
10565
11081
 
@@ -10591,16 +11107,21 @@
10591
11107
 
10592
11108
  <div class="doc doc-contents ">
10593
11109
  <p class="doc doc-class-bases">
10594
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
11110
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
10595
11111
 
10596
11112
 
10597
- <p>Base form for editing multiple objects in bulk.</p>
11113
+ <p>Base form for editing multiple objects in bulk.</p>
10598
11114
  <p>Note that for models supporting custom fields and relationships, nautobot.extras.forms.NautobotBulkEditForm is
10599
11115
  a more powerful subclass and should be used instead of directly inheriting from this class.</p>
10600
11116
 
10601
11117
 
10602
11118
 
10603
11119
 
11120
+
11121
+
11122
+
11123
+
11124
+
10604
11125
  <div class="doc doc-children">
10605
11126
 
10606
11127
 
@@ -10611,6 +11132,23 @@ a more powerful subclass and should be used instead of directly inheriting from
10611
11132
 
10612
11133
 
10613
11134
 
11135
+ <div class="doc doc-object doc-function">
11136
+
11137
+
11138
+ <h3 id="nautobot.apps.forms.BulkEditForm.post_save" class="doc doc-heading">
11139
+ <code class="highlight language-python"><span class="n">post_save</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span></code>
11140
+
11141
+ <a href="#nautobot.apps.forms.BulkEditForm.post_save" class="headerlink" title="Permanent link">&para;</a></h3>
11142
+
11143
+
11144
+ <div class="doc doc-contents ">
11145
+
11146
+ <p>Post save action</p>
11147
+
11148
+ </div>
11149
+
11150
+ </div>
11151
+
10614
11152
 
10615
11153
 
10616
11154
  </div>
@@ -10632,10 +11170,15 @@ a more powerful subclass and should be used instead of directly inheriting from
10632
11170
 
10633
11171
  <div class="doc doc-contents ">
10634
11172
  <p class="doc doc-class-bases">
10635
- Bases: <code><autoref identifier="django.forms.NullBooleanSelect" optional hover>NullBooleanSelect</autoref></code></p>
11173
+ Bases: <code><span title="django.forms.NullBooleanSelect">NullBooleanSelect</span></code></p>
11174
+
11175
+
11176
+ <p>A Select widget for NullBooleanFields</p>
11177
+
11178
+
11179
+
10636
11180
 
10637
11181
 
10638
- <p>A Select widget for NullBooleanFields</p>
10639
11182
 
10640
11183
 
10641
11184
 
@@ -10671,10 +11214,15 @@ a more powerful subclass and should be used instead of directly inheriting from
10671
11214
 
10672
11215
  <div class="doc doc-contents ">
10673
11216
  <p class="doc doc-class-bases">
10674
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
11217
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
11218
+
11219
+
11220
+ <p>An extendable form to be used for renaming objects in bulk.</p>
11221
+
11222
+
11223
+
10675
11224
 
10676
11225
 
10677
- <p>An extendable form to be used for renaming objects in bulk.</p>
10678
11226
 
10679
11227
 
10680
11228
 
@@ -10710,15 +11258,20 @@ a more powerful subclass and should be used instead of directly inheriting from
10710
11258
 
10711
11259
  <div class="doc doc-contents ">
10712
11260
  <p class="doc doc-class-bases">
10713
- Bases: <code><autoref identifier="django.forms.ChoiceField" optional hover>ChoiceField</autoref></code></p>
11261
+ Bases: <code><span title="django.forms.ChoiceField">ChoiceField</span></code></p>
10714
11262
 
10715
11263
 
10716
- <p>Invert the provided set of choices to take the human-friendly label as input, and return the database value.</p>
11264
+ <p>Invert the provided set of choices to take the human-friendly label as input, and return the database value.</p>
10717
11265
  <p>Despite the name, this is no longer used in CSV imports since 2.0, but <em>is</em> used in JSON/YAML import of DeviceTypes.</p>
10718
11266
 
10719
11267
 
10720
11268
 
10721
11269
 
11270
+
11271
+
11272
+
11273
+
11274
+
10722
11275
  <div class="doc doc-children">
10723
11276
 
10724
11277
 
@@ -10750,15 +11303,20 @@ a more powerful subclass and should be used instead of directly inheriting from
10750
11303
 
10751
11304
  <div class="doc doc-contents ">
10752
11305
  <p class="doc doc-class-bases">
10753
- Bases: <code><autoref identifier="nautobot.core.forms.fields.CSVModelChoiceField" optional hover>CSVModelChoiceField</autoref></code></p>
11306
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.fields.CSVModelChoiceField" href="#nautobot.apps.forms.CSVModelChoiceField">CSVModelChoiceField</a></code></p>
10754
11307
 
10755
11308
 
10756
- <p>Reference a ContentType in the form <code>{app_label}.{model}</code>.</p>
11309
+ <p>Reference a ContentType in the form <code>{app_label}.{model}</code>.</p>
10757
11310
  <p>Note: class name is misleading; this field is also used in numerous FilterSets where it has nothing to do with CSV.</p>
10758
11311
 
10759
11312
 
10760
11313
 
10761
11314
 
11315
+
11316
+
11317
+
11318
+
11319
+
10762
11320
  <div class="doc doc-children">
10763
11321
 
10764
11322
 
@@ -10780,7 +11338,7 @@ a more powerful subclass and should be used instead of directly inheriting from
10780
11338
 
10781
11339
  <div class="doc doc-contents ">
10782
11340
 
10783
- <p>Allow this field to support <code>{app_label}.{model}</code> style, null values, or PK-based lookups
11341
+ <p>Allow this field to support <code>{app_label}.{model}</code> style, null values, or PK-based lookups
10784
11342
  depending on how the field is used.</p>
10785
11343
 
10786
11344
  </div>
@@ -10808,10 +11366,10 @@ depending on how the field is used.</p>
10808
11366
 
10809
11367
  <div class="doc doc-contents ">
10810
11368
  <p class="doc doc-class-bases">
10811
- Bases: <code><autoref identifier="django.forms.CharField" optional hover>CharField</autoref></code></p>
11369
+ Bases: <code><span title="django.forms.CharField">CharField</span></code></p>
10812
11370
 
10813
11371
 
10814
- <p>A CharField (rendered as a Textarea) which expects CSV-formatted data.</p>
11372
+ <p>A CharField (rendered as a Textarea) which expects CSV-formatted data.</p>
10815
11373
  <p>Initial value is a list of headers corresponding to the required fields for the given serializer class.</p>
10816
11374
  <p>This no longer actually does any CSV parsing or validation on its own,
10817
11375
  as that is now handled by the NautobotCSVParser class and the REST API serializers.</p>
@@ -10829,9 +11387,11 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
10829
11387
  </thead>
10830
11388
  <tbody>
10831
11389
  <tr class="doc-section-item">
10832
- <td><code>required_field_names</code></td>
10833
11390
  <td>
10834
- <code><autoref identifier="list" optional>list</autoref>[<autoref identifier="str" optional>str</autoref>]</code>
11391
+ <code>required_field_names</code>
11392
+ </td>
11393
+ <td>
11394
+ <code>list[str]</code>
10835
11395
  </td>
10836
11396
  <td>
10837
11397
  <div class="doc-md-description">
@@ -10848,6 +11408,11 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
10848
11408
 
10849
11409
 
10850
11410
 
11411
+
11412
+
11413
+
11414
+
11415
+
10851
11416
  <div class="doc doc-children">
10852
11417
 
10853
11418
 
@@ -10879,16 +11444,21 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
10879
11444
 
10880
11445
  <div class="doc doc-contents ">
10881
11446
  <p class="doc doc-class-bases">
10882
- Bases: <code><autoref identifier="django.forms.FileField" optional hover>FileField</autoref></code></p>
11447
+ Bases: <code><span title="django.forms.FileField">FileField</span></code></p>
10883
11448
 
10884
11449
 
10885
- <p>A FileField (rendered as a ClearableFileInput) which expects a file containing CSV-formatted data.</p>
11450
+ <p>A FileField (rendered as a ClearableFileInput) which expects a file containing CSV-formatted data.</p>
10886
11451
  <p>This no longer actually does any CSV parsing or validation on its own,
10887
11452
  as that is now handled by the NautobotCSVParser class and the REST API serializers.</p>
10888
11453
 
10889
11454
 
10890
11455
 
10891
11456
 
11457
+
11458
+
11459
+
11460
+
11461
+
10892
11462
  <div class="doc doc-children">
10893
11463
 
10894
11464
 
@@ -10903,14 +11473,14 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
10903
11473
 
10904
11474
 
10905
11475
  <h3 id="nautobot.apps.forms.CSVFileField.to_python" class="doc doc-heading">
10906
- <code class="highlight language-python"><span class="n">to_python</span><span class="p">(</span><span class="n">file</span><span class="p">)</span></code>
11476
+ <code class="highlight language-python"><span class="n">to_python</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
10907
11477
 
10908
11478
  <a href="#nautobot.apps.forms.CSVFileField.to_python" class="headerlink" title="Permanent link">&para;</a></h3>
10909
11479
 
10910
11480
 
10911
11481
  <div class="doc doc-contents ">
10912
11482
 
10913
- <p>For parity with CSVDataField, this returns the CSV text rather than an UploadedFile object.</p>
11483
+ <p>For parity with CSVDataField, this returns the CSV text rather than an UploadedFile object.</p>
10914
11484
 
10915
11485
  </div>
10916
11486
 
@@ -10937,17 +11507,22 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
10937
11507
 
10938
11508
  <div class="doc doc-contents ">
10939
11509
  <p class="doc doc-class-bases">
10940
- Bases: <code><autoref identifier="django.forms.ModelChoiceField" optional hover>ModelChoiceField</autoref></code></p>
11510
+ Bases: <code><span title="django.forms.ModelChoiceField">ModelChoiceField</span></code></p>
10941
11511
 
10942
11512
 
10943
- <p>Provides additional validation for model choices entered as CSV data.</p>
11513
+ <p>Provides additional validation for model choices entered as CSV data.</p>
10944
11514
  <p>Note: class name is misleading; the subclass CSVContentTypeField (below) is also used in FilterSets, where it has
10945
11515
  nothing to do with CSV data.</p>
10946
11516
 
10947
11517
 
10948
11518
 
10949
11519
 
10950
- <div class="doc doc-children">
11520
+
11521
+
11522
+
11523
+
11524
+
11525
+ <div class="doc doc-children">
10951
11526
 
10952
11527
 
10953
11528
 
@@ -10978,16 +11553,21 @@ nothing to do with CSV data.</p>
10978
11553
 
10979
11554
  <div class="doc doc-contents ">
10980
11555
  <p class="doc doc-class-bases">
10981
- Bases: <code><autoref identifier="django.forms.ModelForm" optional hover>ModelForm</autoref></code></p>
11556
+ Bases: <code><span title="django.forms.ModelForm">ModelForm</span></code></p>
10982
11557
 
10983
11558
 
10984
- <p>ModelForm used for the import of objects.</p>
11559
+ <p>ModelForm used for the import of objects.</p>
10985
11560
  <p>Note: the name is misleading as since 2.0 this is no longer used for CSV imports; however it <em>is</em> still used for
10986
11561
  JSON/YAML imports of DeviceTypes and their component templates.</p>
10987
11562
 
10988
11563
 
10989
11564
 
10990
11565
 
11566
+
11567
+
11568
+
11569
+
11570
+
10991
11571
  <div class="doc doc-children">
10992
11572
 
10993
11573
 
@@ -11019,16 +11599,21 @@ JSON/YAML imports of DeviceTypes and their component templates.</p>
11019
11599
 
11020
11600
  <div class="doc doc-contents ">
11021
11601
  <p class="doc doc-class-bases">
11022
- Bases: <code><autoref identifier="nautobot.core.forms.fields.CSVChoiceField" optional hover>CSVChoiceField</autoref></code></p>
11602
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.fields.CSVChoiceField" href="#nautobot.apps.forms.CSVChoiceField">CSVChoiceField</a></code></p>
11023
11603
 
11024
11604
 
11025
- <p>A version of CSVChoiceField that supports and emits a list of choice values.</p>
11605
+ <p>A version of CSVChoiceField that supports and emits a list of choice values.</p>
11026
11606
  <p>As with CSVChoiceField, the name is misleading, as this is no longer used for CSV imports, but is used for
11027
11607
  JSON/YAML import of DeviceTypes still.</p>
11028
11608
 
11029
11609
 
11030
11610
 
11031
11611
 
11612
+
11613
+
11614
+
11615
+
11616
+
11032
11617
  <div class="doc doc-children">
11033
11618
 
11034
11619
 
@@ -11050,7 +11635,7 @@ JSON/YAML import of DeviceTypes still.</p>
11050
11635
 
11051
11636
  <div class="doc doc-contents ">
11052
11637
 
11053
- <p>Return a list of strings.</p>
11638
+ <p>Return a list of strings.</p>
11054
11639
 
11055
11640
  </div>
11056
11641
 
@@ -11067,7 +11652,7 @@ JSON/YAML import of DeviceTypes still.</p>
11067
11652
 
11068
11653
  <div class="doc doc-contents ">
11069
11654
 
11070
- <p>Validate that each of the input values is in self.choices.</p>
11655
+ <p>Validate that each of the input values is in self.choices.</p>
11071
11656
 
11072
11657
  </div>
11073
11658
 
@@ -11094,16 +11679,21 @@ JSON/YAML import of DeviceTypes still.</p>
11094
11679
 
11095
11680
  <div class="doc doc-contents ">
11096
11681
  <p class="doc doc-class-bases">
11097
- Bases: <code><autoref identifier="nautobot.core.forms.fields.MultipleContentTypeField" optional hover>MultipleContentTypeField</autoref></code></p>
11682
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.fields.MultipleContentTypeField" href="#nautobot.apps.forms.MultipleContentTypeField">MultipleContentTypeField</a></code></p>
11098
11683
 
11099
11684
 
11100
- <p>Reference a list of <code>ContentType</code> objects in the form `{app_label}.{model}'.</p>
11685
+ <p>Reference a list of <code>ContentType</code> objects in the form `{app_label}.{model}'.</p>
11101
11686
  <p>Note: This is unused in Nautobot core at this time, but some apps (data-validation-engine) use this for non-CSV
11102
11687
  purposes, similar to CSVContentTypeField above.</p>
11103
11688
 
11104
11689
 
11105
11690
 
11106
11691
 
11692
+
11693
+
11694
+
11695
+
11696
+
11107
11697
  <div class="doc doc-children">
11108
11698
 
11109
11699
 
@@ -11125,7 +11715,7 @@ purposes, similar to CSVContentTypeField above.</p>
11125
11715
 
11126
11716
  <div class="doc doc-contents ">
11127
11717
 
11128
- <p>Parse a comma-separated string of model names into a list of PKs.</p>
11718
+ <p>Parse a comma-separated string of model names into a list of PKs.</p>
11129
11719
 
11130
11720
  </div>
11131
11721
 
@@ -11152,10 +11742,15 @@ purposes, similar to CSVContentTypeField above.</p>
11152
11742
 
11153
11743
  <div class="doc doc-contents ">
11154
11744
  <p class="doc doc-class-bases">
11155
- Bases: <code><autoref identifier="django.forms.Select" optional hover>Select</autoref></code></p>
11745
+ Bases: <code><span title="django.forms.Select">Select</span></code></p>
11746
+
11747
+
11748
+ <p>Extends the built-in Select widget to colorize each <option>.</p>
11749
+
11750
+
11751
+
11156
11752
 
11157
11753
 
11158
- <p>Extends the built-in Select widget to colorize each <option>.</p>
11159
11754
 
11160
11755
 
11161
11756
 
@@ -11191,10 +11786,15 @@ purposes, similar to CSVContentTypeField above.</p>
11191
11786
 
11192
11787
  <div class="doc doc-contents ">
11193
11788
  <p class="doc doc-class-bases">
11194
- Bases: <code><autoref identifier="django.forms.CharField" optional hover>CharField</autoref></code></p>
11789
+ Bases: <code><span title="django.forms.CharField">CharField</span></code></p>
11790
+
11791
+
11792
+ <p>A textarea with support for Markdown rendering. Exists mostly just to add a standard help_text.</p>
11793
+
11794
+
11795
+
11195
11796
 
11196
11797
 
11197
- <p>A textarea with support for Markdown rendering. Exists mostly just to add a standard help_text.</p>
11198
11798
 
11199
11799
 
11200
11800
 
@@ -11230,10 +11830,15 @@ purposes, similar to CSVContentTypeField above.</p>
11230
11830
 
11231
11831
  <div class="doc doc-contents ">
11232
11832
  <p class="doc doc-class-bases">
11233
- Bases: <code><autoref identifier="nautobot.core.forms.forms.BootstrapMixin" optional hover>BootstrapMixin</autoref></code>, <code><autoref identifier="nautobot.core.forms.forms.ReturnURLForm" optional hover>ReturnURLForm</autoref></code></p>
11833
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.forms.BootstrapMixin" href="#nautobot.apps.forms.BootstrapMixin">BootstrapMixin</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.forms.ReturnURLForm" href="#nautobot.apps.forms.ReturnURLForm">ReturnURLForm</a></code></p>
11834
+
11835
+
11836
+ <p>A generic confirmation form. The form is not valid unless the confirm field is checked.</p>
11837
+
11838
+
11839
+
11234
11840
 
11235
11841
 
11236
- <p>A generic confirmation form. The form is not valid unless the confirm field is checked.</p>
11237
11842
 
11238
11843
 
11239
11844
 
@@ -11269,10 +11874,15 @@ purposes, similar to CSVContentTypeField above.</p>
11269
11874
 
11270
11875
  <div class="doc doc-contents ">
11271
11876
  <p class="doc doc-class-bases">
11272
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
11877
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
11878
+
11879
+
11880
+ <p>Adds the <code>contacts</code> and <code>teams</code> form fields to a filter form.</p>
11881
+
11882
+
11883
+
11273
11884
 
11274
11885
 
11275
- <p>Adds the <code>contacts</code> and <code>teams</code> form fields to a filter form.</p>
11276
11886
 
11277
11887
 
11278
11888
 
@@ -11308,16 +11918,21 @@ purposes, similar to CSVContentTypeField above.</p>
11308
11918
 
11309
11919
  <div class="doc doc-contents ">
11310
11920
  <p class="doc doc-class-bases">
11311
- Bases: <code><autoref identifier="nautobot.core.forms.widgets.StaticSelect2" optional hover>StaticSelect2</autoref></code></p>
11921
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.widgets.StaticSelect2" href="#nautobot.apps.forms.StaticSelect2">StaticSelect2</a></code></p>
11312
11922
 
11313
11923
 
11314
- <p>Appends an <code>api-value</code> attribute equal to the slugified model name for each ContentType. For example:
11924
+ <p>Appends an <code>api-value</code> attribute equal to the slugified model name for each ContentType. For example:
11315
11925
  <option value="37" api-value="console-server-port">console server port</option>
11316
11926
  This attribute can be used to reference the relevant API endpoint for a particular ContentType.</p>
11317
11927
 
11318
11928
 
11319
11929
 
11320
11930
 
11931
+
11932
+
11933
+
11934
+
11935
+
11321
11936
  <div class="doc doc-children">
11322
11937
 
11323
11938
 
@@ -11349,10 +11964,10 @@ This attribute can be used to reference the relevant API endpoint for a particul
11349
11964
 
11350
11965
  <div class="doc doc-contents ">
11351
11966
  <p class="doc doc-class-bases">
11352
- Bases: <code><autoref identifier="nautobot.core.forms.CSVModelForm" optional hover>CSVModelForm</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.CustomFieldModelFormMixin" optional hover>CustomFieldModelFormMixin</autoref></code></p>
11967
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.CSVModelForm" href="#nautobot.apps.forms.CSVModelForm">CSVModelForm</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.CustomFieldModelFormMixin" href="#nautobot.apps.forms.CustomFieldModelFormMixin">CustomFieldModelFormMixin</a></code></p>
11353
11968
 
11354
11969
 
11355
- <p>Base class for CSV/JSON/YAML import of models that support custom fields.</p>
11970
+ <p>Base class for CSV/JSON/YAML import of models that support custom fields.</p>
11356
11971
  <p>TODO: The class name is a misnomer; as of 2.0 this class is <strong>not</strong> used for any CSV imports,
11357
11972
  as that's now handled by the REST API. However it is still used when importing component-templates as
11358
11973
  part of a JSON/YAML DeviceType import.</p>
@@ -11360,6 +11975,11 @@ part of a JSON/YAML DeviceType import.</p>
11360
11975
 
11361
11976
 
11362
11977
 
11978
+
11979
+
11980
+
11981
+
11982
+
11363
11983
  <div class="doc doc-children">
11364
11984
 
11365
11985
 
@@ -11391,7 +12011,12 @@ part of a JSON/YAML DeviceType import.</p>
11391
12011
 
11392
12012
  <div class="doc doc-contents ">
11393
12013
  <p class="doc doc-class-bases">
11394
- Bases: <code><autoref identifier="django.forms.ModelForm" optional hover>ModelForm</autoref></code></p>
12014
+ Bases: <code><span title="django.forms.ModelForm">ModelForm</span></code></p>
12015
+
12016
+
12017
+
12018
+
12019
+
11395
12020
 
11396
12021
 
11397
12022
 
@@ -11428,10 +12053,15 @@ part of a JSON/YAML DeviceType import.</p>
11428
12053
 
11429
12054
  <div class="doc doc-contents ">
11430
12055
  <p class="doc doc-class-bases">
11431
- Bases: <code><autoref identifier="django.forms.TextInput" optional hover>TextInput</autoref></code></p>
12056
+ Bases: <code><span title="django.forms.TextInput">TextInput</span></code></p>
12057
+
12058
+
12059
+ <p>Date picker using Flatpickr.</p>
12060
+
12061
+
12062
+
11432
12063
 
11433
12064
 
11434
- <p>Date picker using Flatpickr.</p>
11435
12065
 
11436
12066
 
11437
12067
 
@@ -11467,10 +12097,15 @@ part of a JSON/YAML DeviceType import.</p>
11467
12097
 
11468
12098
  <div class="doc doc-contents ">
11469
12099
  <p class="doc doc-class-bases">
11470
- Bases: <code><autoref identifier="django.forms.TextInput" optional hover>TextInput</autoref></code></p>
12100
+ Bases: <code><span title="django.forms.TextInput">TextInput</span></code></p>
12101
+
12102
+
12103
+ <p>DateTime picker using Flatpickr.</p>
12104
+
12105
+
12106
+
11471
12107
 
11472
12108
 
11473
- <p>DateTime picker using Flatpickr.</p>
11474
12109
 
11475
12110
 
11476
12111
 
@@ -11506,10 +12141,15 @@ part of a JSON/YAML DeviceType import.</p>
11506
12141
 
11507
12142
  <div class="doc doc-contents ">
11508
12143
  <p class="doc doc-class-bases">
11509
- Bases: <code><autoref identifier="nautobot.core.forms.forms.BootstrapMixin" optional hover>BootstrapMixin</autoref></code>, <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
12144
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.forms.BootstrapMixin" href="#nautobot.apps.forms.BootstrapMixin">BootstrapMixin</a></code>, <code><span title="django.forms.Form">Form</span></code></p>
12145
+
12146
+
12147
+ <p>Form for dynamically inputting filter values for an object list.</p>
12148
+
12149
+
12150
+
11510
12151
 
11511
12152
 
11512
- <p>Form for dynamically inputting filter values for an object list.</p>
11513
12153
 
11514
12154
 
11515
12155
 
@@ -11545,10 +12185,15 @@ part of a JSON/YAML DeviceType import.</p>
11545
12185
 
11546
12186
  <div class="doc doc-contents ">
11547
12187
  <p class="doc doc-class-bases">
11548
- Bases: <code><autoref identifier="django.forms.ModelForm" optional hover>ModelForm</autoref></code></p>
12188
+ Bases: <code><span title="django.forms.ModelForm">ModelForm</span></code></p>
12189
+
12190
+
12191
+ <p>Mixin to add <code>dynamic_groups</code> field to model create/edit forms where applicable.</p>
12192
+
12193
+
12194
+
11549
12195
 
11550
12196
 
11551
- <p>Mixin to add <code>dynamic_groups</code> field to model create/edit forms where applicable.</p>
11552
12197
 
11553
12198
 
11554
12199
 
@@ -11584,15 +12229,20 @@ part of a JSON/YAML DeviceType import.</p>
11584
12229
 
11585
12230
  <div class="doc doc-contents ">
11586
12231
  <p class="doc doc-class-bases">
11587
- Bases: <code><autoref identifier="nautobot.core.forms.fields.DynamicModelChoiceMixin" optional hover>DynamicModelChoiceMixin</autoref></code>, <code><autoref identifier="django.forms.ModelChoiceField" optional hover>ModelChoiceField</autoref></code></p>
12232
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.fields.DynamicModelChoiceMixin" href="#nautobot.apps.forms.DynamicModelChoiceMixin">DynamicModelChoiceMixin</a></code>, <code><span title="django.forms.ModelChoiceField">ModelChoiceField</span></code></p>
11588
12233
 
11589
12234
 
11590
- <p>Override get_bound_field() to avoid pre-populating field choices with a SQL query. The field will be
12235
+ <p>Override get_bound_field() to avoid pre-populating field choices with a SQL query. The field will be
11591
12236
  rendered only with choices set via bound data. Choices are populated on-demand via the APISelect widget.</p>
11592
12237
 
11593
12238
 
11594
12239
 
11595
12240
 
12241
+
12242
+
12243
+
12244
+
12245
+
11596
12246
  <div class="doc doc-children">
11597
12247
 
11598
12248
 
@@ -11614,7 +12264,7 @@ rendered only with choices set via bound data. Choices are populated on-demand v
11614
12264
 
11615
12265
  <div class="doc doc-contents ">
11616
12266
 
11617
- <p>When null option is enabled and "None" is sent as part of a form to be submitted, it is sent as the
12267
+ <p>When null option is enabled and "None" is sent as part of a form to be submitted, it is sent as the
11618
12268
  string 'null'. This will check for that condition and gracefully handle the conversion to a NoneType.</p>
11619
12269
 
11620
12270
  </div>
@@ -11643,7 +12293,7 @@ string 'null'. This will check for that condition and gracefully handle the con
11643
12293
  <div class="doc doc-contents ">
11644
12294
 
11645
12295
 
11646
- <p>:param display_field: The name of the attribute of an API response object to display in the selection list
12296
+ <p>:param display_field: The name of the attribute of an API response object to display in the selection list
11647
12297
  :param query_params: A dictionary of additional key/value pairs to attach to the API request
11648
12298
  :param initial_params: A dictionary of child field references to use for selecting a parent field's initial value
11649
12299
  :param null_option: The string used to represent a null selection (if any)
@@ -11654,6 +12304,11 @@ string 'null'. This will check for that condition and gracefully handle the con
11654
12304
 
11655
12305
 
11656
12306
 
12307
+
12308
+
12309
+
12310
+
12311
+
11657
12312
  <div class="doc doc-children">
11658
12313
 
11659
12314
 
@@ -11675,7 +12330,7 @@ string 'null'. This will check for that condition and gracefully handle the con
11675
12330
 
11676
12331
  <div class="doc doc-contents ">
11677
12332
 
11678
- <p>Augment the behavior of forms.ModelChoiceField.prepare_value().</p>
12333
+ <p>Augment the behavior of forms.ModelChoiceField.prepare_value().</p>
11679
12334
  <p>Specifically, if <code>value</code> is a PK, but we have <code>to_field_name</code> set, we need to look up the model instance
11680
12335
  from the given PK, so that the base class will get the appropriate field value rather than just keeping the PK,
11681
12336
  because the rendered form field needs this in order to correctly prepopulate a default selection.</p>
@@ -11705,10 +12360,15 @@ because the rendered form field needs this in order to correctly prepopulate a d
11705
12360
 
11706
12361
  <div class="doc doc-contents ">
11707
12362
  <p class="doc doc-class-bases">
11708
- Bases: <code><autoref identifier="nautobot.core.forms.fields.DynamicModelChoiceMixin" optional hover>DynamicModelChoiceMixin</autoref></code>, <code><autoref identifier="django.forms.ModelMultipleChoiceField" optional hover>ModelMultipleChoiceField</autoref></code></p>
12363
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.fields.DynamicModelChoiceMixin" href="#nautobot.apps.forms.DynamicModelChoiceMixin">DynamicModelChoiceMixin</a></code>, <code><span title="django.forms.ModelMultipleChoiceField">ModelMultipleChoiceField</span></code></p>
12364
+
12365
+
12366
+ <p>A multiple-choice version of DynamicModelChoiceField.</p>
12367
+
12368
+
12369
+
11709
12370
 
11710
12371
 
11711
- <p>A multiple-choice version of DynamicModelChoiceField.</p>
11712
12372
 
11713
12373
 
11714
12374
 
@@ -11744,15 +12404,20 @@ because the rendered form field needs this in order to correctly prepopulate a d
11744
12404
 
11745
12405
  <div class="doc doc-contents ">
11746
12406
  <p class="doc doc-class-bases">
11747
- Bases: <code><autoref identifier="django.forms.CharField" optional hover>CharField</autoref></code></p>
12407
+ Bases: <code><span title="django.forms.CharField">CharField</span></code></p>
11748
12408
 
11749
12409
 
11750
- <p>A field which allows for expansion of IP address ranges
12410
+ <p>A field which allows for expansion of IP address ranges
11751
12411
  Example: '192.0.2.[1-254]/24' =&gt; ['192.0.2.1/24', '192.0.2.2/24', '192.0.2.3/24' ... '192.0.2.254/24']</p>
11752
12412
 
11753
12413
 
11754
12414
 
11755
12415
 
12416
+
12417
+
12418
+
12419
+
12420
+
11756
12421
  <div class="doc doc-children">
11757
12422
 
11758
12423
 
@@ -11784,15 +12449,20 @@ because the rendered form field needs this in order to correctly prepopulate a d
11784
12449
 
11785
12450
  <div class="doc doc-contents ">
11786
12451
  <p class="doc doc-class-bases">
11787
- Bases: <code><autoref identifier="django.forms.CharField" optional hover>CharField</autoref></code></p>
12452
+ Bases: <code><span title="django.forms.CharField">CharField</span></code></p>
11788
12453
 
11789
12454
 
11790
- <p>A field which allows for numeric range expansion
12455
+ <p>A field which allows for numeric range expansion
11791
12456
  Example: 'Gi0/[1-3]' =&gt; ['Gi0/1', 'Gi0/2', 'Gi0/3']</p>
11792
12457
 
11793
12458
 
11794
12459
 
11795
12460
 
12461
+
12462
+
12463
+
12464
+
12465
+
11796
12466
  <div class="doc doc-children">
11797
12467
 
11798
12468
 
@@ -11824,10 +12494,15 @@ because the rendered form field needs this in order to correctly prepopulate a d
11824
12494
 
11825
12495
  <div class="doc doc-contents ">
11826
12496
  <p class="doc doc-class-bases">
11827
- Bases: <code><autoref identifier="nautobot.core.forms.forms.BootstrapMixin" optional hover>BootstrapMixin</autoref></code>, <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
12497
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.forms.BootstrapMixin" href="#nautobot.apps.forms.BootstrapMixin">BootstrapMixin</a></code>, <code><span title="django.forms.Form">Form</span></code></p>
12498
+
12499
+
12500
+ <p>Generic form for creating an object from JSON/YAML data</p>
12501
+
12502
+
12503
+
11828
12504
 
11829
12505
 
11830
- <p>Generic form for creating an object from JSON/YAML data</p>
11831
12506
 
11832
12507
 
11833
12508
 
@@ -11863,16 +12538,21 @@ because the rendered form field needs this in order to correctly prepopulate a d
11863
12538
 
11864
12539
  <div class="doc doc-contents ">
11865
12540
  <p class="doc doc-class-bases">
11866
- Bases: <code><autoref identifier="django.forms.JSONField" optional hover>JSONField</autoref></code></p>
12541
+ Bases: <code><span title="django.forms.JSONField">JSONField</span></code></p>
11867
12542
 
11868
12543
 
11869
- <p>A FormField counterpart to JSONArrayField.
12544
+ <p>A FormField counterpart to JSONArrayField.
11870
12545
  Replicates ArrayFormField's base field validation: Field values are validated as JSON Arrays,
11871
12546
  and each Array element is validated by <code>base_field</code> validators.</p>
11872
12547
 
11873
12548
 
11874
12549
 
11875
12550
 
12551
+
12552
+
12553
+
12554
+
12555
+
11876
12556
  <div class="doc doc-children">
11877
12557
 
11878
12558
 
@@ -11894,7 +12574,7 @@ and each Array element is validated by <code>base_field</code> validators.</p>
11894
12574
 
11895
12575
  <div class="doc doc-contents ">
11896
12576
 
11897
- <p>Validate <code>value</code> and return its "cleaned" value as an appropriate
12577
+ <p>Validate <code>value</code> and return its "cleaned" value as an appropriate
11898
12578
  Python object. Raise ValidationError for any errors.</p>
11899
12579
 
11900
12580
  </div>
@@ -11912,7 +12592,7 @@ Python object. Raise ValidationError for any errors.</p>
11912
12592
 
11913
12593
  <div class="doc doc-contents ">
11914
12594
 
11915
- <p>Return True if <code>data</code> differs from <code>initial</code>.</p>
12595
+ <p>Return True if <code>data</code> differs from <code>initial</code>.</p>
11916
12596
 
11917
12597
  </div>
11918
12598
 
@@ -11929,7 +12609,7 @@ Python object. Raise ValidationError for any errors.</p>
11929
12609
 
11930
12610
  <div class="doc doc-contents ">
11931
12611
 
11932
- <p>Return a string of this value.</p>
12612
+ <p>Return a string of this value.</p>
11933
12613
 
11934
12614
  </div>
11935
12615
 
@@ -11946,7 +12626,7 @@ Python object. Raise ValidationError for any errors.</p>
11946
12626
 
11947
12627
  <div class="doc doc-contents ">
11948
12628
 
11949
- <p>Runs all validators against <code>value</code> and raise ValidationError if necessary.
12629
+ <p>Runs all validators against <code>value</code> and raise ValidationError if necessary.
11950
12630
  Some validators can't be created at field initialization time.</p>
11951
12631
 
11952
12632
  </div>
@@ -11964,7 +12644,7 @@ Some validators can't be created at field initialization time.</p>
11964
12644
 
11965
12645
  <div class="doc doc-contents ">
11966
12646
 
11967
- <p>Convert <code>value</code> into JSON, raising django.core.exceptions.ValidationError
12647
+ <p>Convert <code>value</code> into JSON, raising django.core.exceptions.ValidationError
11968
12648
  if the data can't be converted. Return the converted value.</p>
11969
12649
 
11970
12650
  </div>
@@ -11974,6 +12654,23 @@ if the data can't be converted. Return the converted value.</p>
11974
12654
  <div class="doc doc-object doc-function">
11975
12655
 
11976
12656
 
12657
+ <h3 id="nautobot.apps.forms.JSONArrayFormField.valid_value" class="doc doc-heading">
12658
+ <code class="highlight language-python"><span class="n">valid_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></code>
12659
+
12660
+ <a href="#nautobot.apps.forms.JSONArrayFormField.valid_value" class="headerlink" title="Permanent link">&para;</a></h3>
12661
+
12662
+
12663
+ <div class="doc doc-contents ">
12664
+
12665
+ <p>Check to see if the provided value is a valid choice.</p>
12666
+
12667
+ </div>
12668
+
12669
+ </div>
12670
+
12671
+ <div class="doc doc-object doc-function">
12672
+
12673
+
11977
12674
  <h3 id="nautobot.apps.forms.JSONArrayFormField.validate" class="doc doc-heading">
11978
12675
  <code class="highlight language-python"><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></code>
11979
12676
 
@@ -11982,7 +12679,7 @@ if the data can't be converted. Return the converted value.</p>
11982
12679
 
11983
12680
  <div class="doc doc-contents ">
11984
12681
 
11985
- <p>Validate <code>value</code> and raise ValidationError if necessary.</p>
12682
+ <p>Validate <code>value</code> and raise ValidationError if necessary.</p>
11986
12683
 
11987
12684
  </div>
11988
12685
 
@@ -12009,10 +12706,15 @@ if the data can't be converted. Return the converted value.</p>
12009
12706
 
12010
12707
  <div class="doc doc-contents ">
12011
12708
  <p class="doc doc-class-bases">
12012
- Bases: <code><autoref identifier="django.forms.fields.JSONField" optional hover>JSONField</autoref></code></p>
12709
+ Bases: <code><span title="django.forms.fields.JSONField">JSONField</span></code></p>
12710
+
12711
+
12712
+ <p>Custom wrapper around Django's built-in JSONField to avoid presenting "null" as the default text.</p>
12713
+
12714
+
12715
+
12013
12716
 
12014
12717
 
12015
- <p>Custom wrapper around Django's built-in JSONField to avoid presenting "null" as the default text.</p>
12016
12718
 
12017
12719
 
12018
12720
 
@@ -12048,15 +12750,20 @@ if the data can't be converted. Return the converted value.</p>
12048
12750
 
12049
12751
  <div class="doc doc-contents ">
12050
12752
  <p class="doc doc-class-bases">
12051
- Bases: <code><autoref identifier="django.forms.URLField" optional hover>URLField</autoref></code></p>
12753
+ Bases: <code><span title="django.forms.URLField">URLField</span></code></p>
12052
12754
 
12053
12755
 
12054
- <p>Modifies Django's built-in URLField to remove the requirement for fully-qualified domain names
12756
+ <p>Modifies Django's built-in URLField to remove the requirement for fully-qualified domain names
12055
12757
  (e.g. http://myserver/ is valid)</p>
12056
12758
 
12057
12759
 
12058
12760
 
12059
12761
 
12762
+
12763
+
12764
+
12765
+
12766
+
12060
12767
  <div class="doc doc-children">
12061
12768
 
12062
12769
 
@@ -12088,15 +12795,20 @@ if the data can't be converted. Return the converted value.</p>
12088
12795
 
12089
12796
  <div class="doc doc-contents ">
12090
12797
  <p class="doc doc-class-bases">
12091
- Bases: <code><autoref identifier="nautobot.core.forms.fields.DynamicModelChoiceMixin" optional hover>DynamicModelChoiceMixin</autoref></code>, <code><autoref identifier="django_filters.fields.ModelMultipleChoiceField" optional hover>ModelMultipleChoiceField</autoref></code></p>
12798
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.fields.DynamicModelChoiceMixin" href="#nautobot.apps.forms.DynamicModelChoiceMixin">DynamicModelChoiceMixin</a></code>, <code><span title="django_filters.fields.ModelMultipleChoiceField">ModelMultipleChoiceField</span></code></p>
12092
12799
 
12093
12800
 
12094
- <p>Filter field to support matching on the PK <em>or</em> <code>to_field_name</code> fields (defaulting to <code>slug</code> if not specified).</p>
12801
+ <p>Filter field to support matching on the PK <em>or</em> <code>to_field_name</code> fields (defaulting to <code>slug</code> if not specified).</p>
12095
12802
  <p>Raises ValidationError if none of the fields match the requested value.</p>
12096
12803
 
12097
12804
 
12098
12805
 
12099
12806
 
12807
+
12808
+
12809
+
12810
+
12811
+
12100
12812
  <div class="doc doc-children">
12101
12813
 
12102
12814
 
@@ -12128,15 +12840,20 @@ if the data can't be converted. Return the converted value.</p>
12128
12840
 
12129
12841
  <div class="doc doc-contents ">
12130
12842
  <p class="doc doc-class-bases">
12131
- Bases: <code><autoref identifier="django.forms.CharField" optional hover>CharField</autoref></code></p>
12843
+ Bases: <code><span title="django.forms.CharField">CharField</span></code></p>
12132
12844
 
12133
12845
 
12134
- <p>CharField that takes multiple user character inputs and render them as tags in the form field.
12846
+ <p>CharField that takes multiple user character inputs and render them as tags in the form field.
12135
12847
  Press enter to complete an input.</p>
12136
12848
 
12137
12849
 
12138
12850
 
12139
12851
 
12852
+
12853
+
12854
+
12855
+
12856
+
12140
12857
  <div class="doc doc-children">
12141
12858
 
12142
12859
 
@@ -12168,15 +12885,20 @@ Press enter to complete an input.</p>
12168
12885
 
12169
12886
  <div class="doc doc-contents ">
12170
12887
  <p class="doc doc-class-bases">
12171
- Bases: <code><autoref identifier="nautobot.core.forms.widgets.StaticSelect2Multiple" optional hover>StaticSelect2Multiple</autoref></code></p>
12888
+ Bases: <code><span title="nautobot.core.forms.widgets.StaticSelect2Multiple">StaticSelect2Multiple</span></code></p>
12172
12889
 
12173
12890
 
12174
- <p>Manual text input with tagging enabled.
12891
+ <p>Manual text input with tagging enabled.
12175
12892
  Press enter to create a new entry.</p>
12176
12893
 
12177
12894
 
12178
12895
 
12179
12896
 
12897
+
12898
+
12899
+
12900
+
12901
+
12180
12902
  <div class="doc doc-children">
12181
12903
 
12182
12904
 
@@ -12208,16 +12930,21 @@ Press enter to create a new entry.</p>
12208
12930
 
12209
12931
  <div class="doc doc-contents ">
12210
12932
  <p class="doc doc-class-bases">
12211
- Bases: <code><autoref identifier="django.forms.ModelMultipleChoiceField" optional hover>ModelMultipleChoiceField</autoref></code></p>
12933
+ Bases: <code><span title="django.forms.ModelMultipleChoiceField">ModelMultipleChoiceField</span></code></p>
12212
12934
 
12213
12935
 
12214
- <p>Field for choosing any number of <code>ContentType</code> objects.</p>
12936
+ <p>Field for choosing any number of <code>ContentType</code> objects.</p>
12215
12937
  <p>Optionally can restrict the available ContentTypes to those supporting a particular feature only.
12216
12938
  Optionally can pass the selection through as a list of <code>{app_label}.{model}</code> strings instead of PK values.</p>
12217
12939
 
12218
12940
 
12219
12941
 
12220
12942
 
12943
+
12944
+
12945
+
12946
+
12947
+
12221
12948
  <div class="doc doc-children">
12222
12949
 
12223
12950
 
@@ -12239,7 +12966,7 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
12239
12966
 
12240
12967
  <div class="doc doc-contents ">
12241
12968
 
12242
- <p>Construct a MultipleContentTypeField.</p>
12969
+ <p>Construct a MultipleContentTypeField.</p>
12243
12970
 
12244
12971
 
12245
12972
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12254,9 +12981,11 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
12254
12981
  </thead>
12255
12982
  <tbody>
12256
12983
  <tr class="doc-section-item">
12257
- <td><code>feature</code></td>
12258
12984
  <td>
12259
- <code><autoref identifier="str" optional>str</autoref></code>
12985
+ <code>feature</code>
12986
+ </td>
12987
+ <td>
12988
+ <code>str</code>
12260
12989
  </td>
12261
12990
  <td>
12262
12991
  <div class="doc-md-description">
@@ -12268,9 +12997,11 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
12268
12997
  </td>
12269
12998
  </tr>
12270
12999
  <tr class="doc-section-item">
12271
- <td><code>choices_as_strings</code></td>
12272
13000
  <td>
12273
- <code><autoref identifier="bool" optional>bool</autoref></code>
13001
+ <code>choices_as_strings</code>
13002
+ </td>
13003
+ <td>
13004
+ <code>bool</code>
12274
13005
  </td>
12275
13006
  <td>
12276
13007
  <div class="doc-md-description">
@@ -12309,10 +13040,15 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
12309
13040
 
12310
13041
  <div class="doc doc-contents ">
12311
13042
  <p class="doc doc-class-bases">
12312
- Bases: <code><autoref identifier="nautobot.core.forms.BootstrapMixin" optional hover>BootstrapMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.CustomFieldModelBulkEditFormMixin" optional hover>CustomFieldModelBulkEditFormMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.NoteModelBulkEditFormMixin" optional hover>NoteModelBulkEditFormMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.RelationshipModelBulkEditFormMixin" optional hover>RelationshipModelBulkEditFormMixin</autoref></code></p>
13043
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.BootstrapMixin" href="#nautobot.apps.forms.BootstrapMixin">BootstrapMixin</a></code>, <code><span title="nautobot.extras.forms.mixins.CustomFieldModelBulkEditFormMixin">CustomFieldModelBulkEditFormMixin</span></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.NoteModelBulkEditFormMixin" href="#nautobot.apps.forms.NoteModelBulkEditFormMixin">NoteModelBulkEditFormMixin</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.RelationshipModelBulkEditFormMixin" href="#nautobot.apps.forms.RelationshipModelBulkEditFormMixin">RelationshipModelBulkEditFormMixin</a></code></p>
13044
+
13045
+
13046
+ <p>Base class for bulk-edit forms for models that support relationships, custom fields and notes.</p>
13047
+
13048
+
13049
+
12313
13050
 
12314
13051
 
12315
- <p>Base class for bulk-edit forms for models that support relationships, custom fields and notes.</p>
12316
13052
 
12317
13053
 
12318
13054
 
@@ -12348,16 +13084,21 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
12348
13084
 
12349
13085
  <div class="doc doc-contents ">
12350
13086
  <p class="doc doc-class-bases">
12351
- Bases: <code><autoref identifier="nautobot.core.forms.BootstrapMixin" optional hover>BootstrapMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.ContactTeamModelFilterFormMixin" optional hover>ContactTeamModelFilterFormMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.CustomFieldModelFilterFormMixin" optional hover>CustomFieldModelFilterFormMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.RelationshipModelFilterFormMixin" optional hover>RelationshipModelFilterFormMixin</autoref></code></p>
13087
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.BootstrapMixin" href="#nautobot.apps.forms.BootstrapMixin">BootstrapMixin</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.ContactTeamModelFilterFormMixin" href="#nautobot.apps.forms.ContactTeamModelFilterFormMixin">ContactTeamModelFilterFormMixin</a></code>, <code><span title="nautobot.extras.forms.mixins.CustomFieldModelFilterFormMixin">CustomFieldModelFilterFormMixin</span></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.RelationshipModelFilterFormMixin" href="#nautobot.apps.forms.RelationshipModelFilterFormMixin">RelationshipModelFilterFormMixin</a></code></p>
12352
13088
 
12353
13089
 
12354
- <p>This class exists to combine common functionality and is used to inherit from throughout the
13090
+ <p>This class exists to combine common functionality and is used to inherit from throughout the
12355
13091
  codebase where all of ContactTeamModelFilterFormMixin, CustomFieldModelFilterFormMixin, and
12356
13092
  RelationshipModelFilterFormMixin are needed.</p>
12357
13093
 
12358
13094
 
12359
13095
 
12360
13096
 
13097
+
13098
+
13099
+
13100
+
13101
+
12361
13102
  <div class="doc doc-children">
12362
13103
 
12363
13104
 
@@ -12389,16 +13130,21 @@ RelationshipModelFilterFormMixin are needed.</p>
12389
13130
 
12390
13131
  <div class="doc doc-contents ">
12391
13132
  <p class="doc doc-class-bases">
12392
- Bases: <code><autoref identifier="nautobot.core.forms.BootstrapMixin" optional hover>BootstrapMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.CustomFieldModelFormMixin" optional hover>CustomFieldModelFormMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.DynamicGroupModelFormMixin" optional hover>DynamicGroupModelFormMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.NoteModelFormMixin" optional hover>NoteModelFormMixin</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.RelationshipModelFormMixin" optional hover>RelationshipModelFormMixin</autoref></code></p>
13133
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.BootstrapMixin" href="#nautobot.apps.forms.BootstrapMixin">BootstrapMixin</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.CustomFieldModelFormMixin" href="#nautobot.apps.forms.CustomFieldModelFormMixin">CustomFieldModelFormMixin</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.DynamicGroupModelFormMixin" href="#nautobot.apps.forms.DynamicGroupModelFormMixin">DynamicGroupModelFormMixin</a></code>, <code><span title="nautobot.extras.forms.mixins.NoteModelFormMixin">NoteModelFormMixin</span></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.RelationshipModelFormMixin" href="#nautobot.apps.forms.RelationshipModelFormMixin">RelationshipModelFormMixin</a></code></p>
12393
13134
 
12394
13135
 
12395
- <p>This class exists to combine common functionality and is used to inherit from throughout the
13136
+ <p>This class exists to combine common functionality and is used to inherit from throughout the
12396
13137
  codebase where all of BootstrapMixin, CustomFieldModelFormMixin, RelationshipModelFormMixin, and
12397
13138
  NoteModelFormMixin are needed.</p>
12398
13139
 
12399
13140
 
12400
13141
 
12401
13142
 
13143
+
13144
+
13145
+
13146
+
13147
+
12402
13148
  <div class="doc doc-children">
12403
13149
 
12404
13150
 
@@ -12430,10 +13176,15 @@ NoteModelFormMixin are needed.</p>
12430
13176
 
12431
13177
  <div class="doc doc-contents ">
12432
13178
  <p class="doc doc-class-bases">
12433
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
13179
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
13180
+
13181
+
13182
+ <p>Base for the NoteModelFormMixin and NoteModelBulkEditFormMixin.</p>
13183
+
13184
+
13185
+
12434
13186
 
12435
13187
 
12436
- <p>Base for the NoteModelFormMixin and NoteModelBulkEditFormMixin.</p>
12437
13188
 
12438
13189
 
12439
13190
 
@@ -12469,10 +13220,15 @@ NoteModelFormMixin are needed.</p>
12469
13220
 
12470
13221
  <div class="doc doc-contents ">
12471
13222
  <p class="doc doc-class-bases">
12472
- Bases: <code><autoref identifier="nautobot.core.forms.BulkEditForm" optional hover>BulkEditForm</autoref></code>, <code><autoref identifier="nautobot.extras.forms.mixins.NoteFormBase" optional hover>NoteFormBase</autoref></code></p>
13223
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.BulkEditForm" href="#nautobot.apps.forms.BulkEditForm">BulkEditForm</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.extras.forms.mixins.NoteFormBase" href="#nautobot.apps.forms.NoteFormBase">NoteFormBase</a></code></p>
13224
+
13225
+
13226
+ <p>Bulk-edit form mixin for models that support Notes.</p>
13227
+
13228
+
13229
+
12473
13230
 
12474
13231
 
12475
- <p>Bulk-edit form mixin for models that support Notes.</p>
12476
13232
 
12477
13233
 
12478
13234
 
@@ -12508,10 +13264,15 @@ NoteModelFormMixin are needed.</p>
12508
13264
 
12509
13265
  <div class="doc doc-contents ">
12510
13266
  <p class="doc doc-class-bases">
12511
- Bases: <code><autoref identifier="django.contrib.postgres.forms.SimpleArrayField" optional hover>SimpleArrayField</autoref></code></p>
13267
+ Bases: <code><span title="django.contrib.postgres.forms.SimpleArrayField">SimpleArrayField</span></code></p>
13268
+
13269
+
13270
+ <p>Basic array field that takes comma-separated or hyphenated ranges.</p>
13271
+
13272
+
13273
+
12512
13274
 
12513
13275
 
12514
- <p>Basic array field that takes comma-separated or hyphenated ranges.</p>
12515
13276
 
12516
13277
 
12517
13278
 
@@ -12547,10 +13308,15 @@ NoteModelFormMixin are needed.</p>
12547
13308
 
12548
13309
  <div class="doc doc-contents ">
12549
13310
  <p class="doc doc-class-bases">
12550
- Bases: <code><autoref identifier="django.forms.ModelForm" optional hover>ModelForm</autoref></code></p>
13311
+ Bases: <code><span title="django.forms.ModelForm">ModelForm</span></code></p>
13312
+
13313
+
13314
+ <p>ModelForm mixin for IPNetwork based models.</p>
13315
+
13316
+
13317
+
12551
13318
 
12552
13319
 
12553
- <p>ModelForm mixin for IPNetwork based models.</p>
12554
13320
 
12555
13321
 
12556
13322
 
@@ -12586,10 +13352,15 @@ NoteModelFormMixin are needed.</p>
12586
13352
 
12587
13353
  <div class="doc doc-contents ">
12588
13354
  <p class="doc doc-class-bases">
12589
- Bases: <code><autoref identifier="nautobot.core.forms.BulkEditForm" optional hover>BulkEditForm</autoref></code></p>
13355
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.BulkEditForm" href="#nautobot.apps.forms.BulkEditForm">BulkEditForm</a></code></p>
13356
+
13357
+
13358
+ <p>Bulk-edit form mixin for models that support Relationships.</p>
13359
+
13360
+
13361
+
12590
13362
 
12591
13363
 
12592
- <p>Bulk-edit form mixin for models that support Relationships.</p>
12593
13364
 
12594
13365
 
12595
13366
 
@@ -12615,7 +13386,7 @@ NoteModelFormMixin are needed.</p>
12615
13386
 
12616
13387
  <div class="doc doc-contents ">
12617
13388
 
12618
- <p>Helper method to be called from BulkEditView.post().</p>
13389
+ <p>Helper method to be called from BulkEditView.post().</p>
12619
13390
 
12620
13391
  </div>
12621
13392
 
@@ -12642,7 +13413,12 @@ NoteModelFormMixin are needed.</p>
12642
13413
 
12643
13414
  <div class="doc doc-contents ">
12644
13415
  <p class="doc doc-class-bases">
12645
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
13416
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
13417
+
13418
+
13419
+
13420
+
13421
+
12646
13422
 
12647
13423
 
12648
13424
 
@@ -12679,7 +13455,12 @@ NoteModelFormMixin are needed.</p>
12679
13455
 
12680
13456
  <div class="doc doc-contents ">
12681
13457
  <p class="doc doc-class-bases">
12682
- Bases: <code><autoref identifier="django.forms.ModelForm" optional hover>ModelForm</autoref></code></p>
13458
+ Bases: <code><span title="django.forms.ModelForm">ModelForm</span></code></p>
13459
+
13460
+
13461
+
13462
+
13463
+
12683
13464
 
12684
13465
 
12685
13466
 
@@ -12706,7 +13487,7 @@ NoteModelFormMixin are needed.</p>
12706
13487
 
12707
13488
  <div class="doc doc-contents ">
12708
13489
 
12709
- <p>First check for any required relationships errors and if there are any, add them via form field errors.
13490
+ <p>First check for any required relationships errors and if there are any, add them via form field errors.
12710
13491
  Then verify that any requested RelationshipAssociations do not violate relationship cardinality restrictions.</p>
12711
13492
  <ul>
12712
13493
  <li>For TYPE_ONE_TO_MANY and TYPE_ONE_TO_ONE relations, if the form's object is on the "source" side of
@@ -12742,10 +13523,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
12742
13523
 
12743
13524
  <div class="doc doc-contents ">
12744
13525
  <p class="doc doc-class-bases">
12745
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
13526
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
13527
+
13528
+
13529
+ <p>Provides a hidden return URL field to control where the user is directed after the form is submitted.</p>
13530
+
13531
+
13532
+
12746
13533
 
12747
13534
 
12748
- <p>Provides a hidden return URL field to control where the user is directed after the form is submitted.</p>
12749
13535
 
12750
13536
 
12751
13537
 
@@ -12781,10 +13567,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
12781
13567
 
12782
13568
  <div class="doc doc-contents ">
12783
13569
  <p class="doc doc-class-bases">
12784
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
13570
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
13571
+
13572
+
13573
+ <p>Mixin to add non-required <code>role</code> choice field to forms.</p>
13574
+
13575
+
13576
+
12785
13577
 
12786
13578
 
12787
- <p>Mixin to add non-required <code>role</code> choice field to forms.</p>
12788
13579
 
12789
13580
 
12790
13581
 
@@ -12820,10 +13611,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
12820
13611
 
12821
13612
  <div class="doc doc-contents ">
12822
13613
  <p class="doc doc-class-bases">
12823
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
13614
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
13615
+
13616
+
13617
+ <p>Mixin to add non-required <code>role</code> multiple-choice field to filter forms.</p>
13618
+
13619
+
13620
+
12824
13621
 
12825
13622
 
12826
- <p>Mixin to add non-required <code>role</code> multiple-choice field to filter forms.</p>
12827
13623
 
12828
13624
 
12829
13625
 
@@ -12859,15 +13655,20 @@ Then verify that any requested RelationshipAssociations do not violate relations
12859
13655
 
12860
13656
  <div class="doc doc-contents ">
12861
13657
  <p class="doc doc-class-bases">
12862
- Bases: <code><autoref identifier="django.forms.Select" optional hover>Select</autoref></code></p>
13658
+ Bases: <code><span title="django.forms.Select">Select</span></code></p>
12863
13659
 
12864
13660
 
12865
- <p>Modified the stock Select widget to accept choices using a dict() for a label. The dict for each option must include
13661
+ <p>Modified the stock Select widget to accept choices using a dict() for a label. The dict for each option must include
12866
13662
  'label' (string) and 'disabled' (boolean).</p>
12867
13663
 
12868
13664
 
12869
13665
 
12870
13666
 
13667
+
13668
+
13669
+
13670
+
13671
+
12871
13672
  <div class="doc doc-children">
12872
13673
 
12873
13674
 
@@ -12899,10 +13700,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
12899
13700
 
12900
13701
  <div class="doc doc-contents ">
12901
13702
  <p class="doc doc-class-bases">
12902
- Bases: <code><autoref identifier="nautobot.core.forms.widgets.StaticSelect2" optional hover>StaticSelect2</autoref></code></p>
13703
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.widgets.StaticSelect2" href="#nautobot.apps.forms.StaticSelect2">StaticSelect2</a></code></p>
13704
+
13705
+
13706
+ <p>Include the primary key of each option in the option label (e.g. "Router7 (4721)").</p>
13707
+
13708
+
13709
+
12903
13710
 
12904
13711
 
12905
- <p>Include the primary key of each option in the option label (e.g. "Router7 (4721)").</p>
12906
13712
 
12907
13713
 
12908
13714
 
@@ -12938,10 +13744,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
12938
13744
 
12939
13745
  <div class="doc doc-contents ">
12940
13746
  <p class="doc doc-class-bases">
12941
- Bases: <code><autoref identifier="django.forms.SlugField" optional hover>SlugField</autoref></code></p>
13747
+ Bases: <code><span title="django.forms.SlugField">SlugField</span></code></p>
13748
+
13749
+
13750
+ <p>Extend the built-in SlugField to automatically populate from a field called <code>name</code> unless otherwise specified.</p>
13751
+
13752
+
13753
+
12942
13754
 
12943
13755
 
12944
- <p>Extend the built-in SlugField to automatically populate from a field called <code>name</code> unless otherwise specified.</p>
12945
13756
 
12946
13757
 
12947
13758
 
@@ -12967,7 +13778,7 @@ Then verify that any requested RelationshipAssociations do not violate relations
12967
13778
 
12968
13779
  <div class="doc doc-contents ">
12969
13780
 
12970
- <p>Instantiate a SlugField.</p>
13781
+ <p>Instantiate a SlugField.</p>
12971
13782
 
12972
13783
 
12973
13784
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12982,9 +13793,11 @@ Then verify that any requested RelationshipAssociations do not violate relations
12982
13793
  </thead>
12983
13794
  <tbody>
12984
13795
  <tr class="doc-section-item">
12985
- <td><code>slug_source</code></td>
12986
13796
  <td>
12987
- <code>(<autoref identifier="str" optional>str</autoref>, <autoref identifier="tuple" optional>tuple</autoref>)</code>
13797
+ <code>slug_source</code>
13798
+ </td>
13799
+ <td>
13800
+ <code>(str, tuple)</code>
12988
13801
  </td>
12989
13802
  <td>
12990
13803
  <div class="doc-md-description">
@@ -13023,10 +13836,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
13023
13836
 
13024
13837
  <div class="doc doc-contents ">
13025
13838
  <p class="doc doc-class-bases">
13026
- Bases: <code><autoref identifier="django.forms.TextInput" optional hover>TextInput</autoref></code></p>
13839
+ Bases: <code><span title="django.forms.TextInput">TextInput</span></code></p>
13840
+
13841
+
13842
+ <p>Subclass TextInput and add a slug regeneration button next to the form field.</p>
13843
+
13844
+
13845
+
13027
13846
 
13028
13847
 
13029
- <p>Subclass TextInput and add a slug regeneration button next to the form field.</p>
13030
13848
 
13031
13849
 
13032
13850
 
@@ -13062,10 +13880,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
13062
13880
 
13063
13881
  <div class="doc doc-contents ">
13064
13882
  <p class="doc doc-class-bases">
13065
- Bases: <code><autoref identifier="django.forms.Textarea" optional hover>Textarea</autoref></code></p>
13883
+ Bases: <code><span title="django.forms.Textarea">Textarea</span></code></p>
13884
+
13885
+
13886
+ <p>Subclass used for rendering a smaller textarea element.</p>
13887
+
13888
+
13889
+
13066
13890
 
13067
13891
 
13068
- <p>Subclass used for rendering a smaller textarea element.</p>
13069
13892
 
13070
13893
 
13071
13894
  </div>
@@ -13085,10 +13908,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
13085
13908
 
13086
13909
  <div class="doc doc-contents ">
13087
13910
  <p class="doc doc-class-bases">
13088
- Bases: <code><autoref identifier="nautobot.core.forms.widgets.SelectWithDisabled" optional hover>SelectWithDisabled</autoref></code></p>
13911
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.widgets.SelectWithDisabled" href="#nautobot.apps.forms.SelectWithDisabled">SelectWithDisabled</a></code></p>
13912
+
13913
+
13914
+ <p>A static <select> form widget using the Select2 library.</p>
13915
+
13916
+
13917
+
13089
13918
 
13090
13919
 
13091
- <p>A static <select> form widget using the Select2 library.</p>
13092
13920
 
13093
13921
 
13094
13922
 
@@ -13124,10 +13952,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
13124
13952
 
13125
13953
  <div class="doc doc-contents ">
13126
13954
  <p class="doc doc-class-bases">
13127
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
13955
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
13956
+
13957
+
13958
+ <p>Mixin to add non-required <code>status</code> choice field to forms.</p>
13959
+
13960
+
13961
+
13128
13962
 
13129
13963
 
13130
- <p>Mixin to add non-required <code>status</code> choice field to forms.</p>
13131
13964
 
13132
13965
 
13133
13966
 
@@ -13163,10 +13996,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
13163
13996
 
13164
13997
  <div class="doc doc-contents ">
13165
13998
  <p class="doc doc-class-bases">
13166
- Bases: <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
13999
+ Bases: <code><span title="django.forms.Form">Form</span></code></p>
14000
+
14001
+
14002
+ <p>Mixin to add non-required <code>status</code> multiple-choice field to filter forms.</p>
14003
+
14004
+
14005
+
13167
14006
 
13168
14007
 
13169
- <p>Mixin to add non-required <code>status</code> multiple-choice field to filter forms.</p>
13170
14008
 
13171
14009
 
13172
14010
 
@@ -13202,10 +14040,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
13202
14040
 
13203
14041
  <div class="doc doc-contents ">
13204
14042
  <p class="doc doc-class-bases">
13205
- Bases: <code><autoref identifier="nautobot.core.forms.forms.BootstrapMixin" optional hover>BootstrapMixin</autoref></code>, <code><autoref identifier="django.forms.Form" optional hover>Form</autoref></code></p>
14043
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.forms.BootstrapMixin" href="#nautobot.apps.forms.BootstrapMixin">BootstrapMixin</a></code>, <code><span title="django.forms.Form">Form</span></code></p>
14044
+
14045
+
14046
+ <p>Form for configuring user's table preferences.</p>
14047
+
14048
+
14049
+
13206
14050
 
13207
14051
 
13208
- <p>Form for configuring user's table preferences.</p>
13209
14052
 
13210
14053
 
13211
14054
 
@@ -13241,15 +14084,20 @@ Then verify that any requested RelationshipAssociations do not violate relations
13241
14084
 
13242
14085
  <div class="doc doc-contents ">
13243
14086
  <p class="doc doc-class-bases">
13244
- Bases: <code><autoref identifier="nautobot.core.forms.fields.DynamicModelMultipleChoiceField" optional hover>DynamicModelMultipleChoiceField</autoref></code></p>
14087
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.core.forms.fields.DynamicModelMultipleChoiceField" href="#nautobot.apps.forms.DynamicModelMultipleChoiceField">DynamicModelMultipleChoiceField</a></code></p>
13245
14088
 
13246
14089
 
13247
- <p>A filter field for the tags of a model. Only the tags used by a model are displayed.</p>
14090
+ <p>A filter field for the tags of a model. Only the tags used by a model are displayed.</p>
13248
14091
  <p>:param model: The model of the filter</p>
13249
14092
 
13250
14093
 
13251
14094
 
13252
14095
 
14096
+
14097
+
14098
+
14099
+
14100
+
13253
14101
  <div class="doc doc-children">
13254
14102
 
13255
14103
 
@@ -13281,10 +14129,15 @@ Then verify that any requested RelationshipAssociations do not violate relations
13281
14129
 
13282
14130
  <div class="doc doc-contents ">
13283
14131
  <p class="doc doc-class-bases">
13284
- Bases: <code><autoref identifier="django.forms.TextInput" optional hover>TextInput</autoref></code></p>
14132
+ Bases: <code><span title="django.forms.TextInput">TextInput</span></code></p>
14133
+
14134
+
14135
+ <p>Time picker using Flatpickr.</p>
14136
+
14137
+
14138
+
13285
14139
 
13286
14140
 
13287
- <p>Time picker using Flatpickr.</p>
13288
14141
 
13289
14142
 
13290
14143
 
@@ -13319,7 +14172,7 @@ Then verify that any requested RelationshipAssociations do not violate relations
13319
14172
 
13320
14173
  <div class="doc doc-contents ">
13321
14174
 
13322
- <p>Add a blank choice to the beginning of a choices list.</p>
14175
+ <p>Add a blank choice to the beginning of a choices list.</p>
13323
14176
 
13324
14177
  </div>
13325
14178
 
@@ -13336,7 +14189,7 @@ Then verify that any requested RelationshipAssociations do not violate relations
13336
14189
 
13337
14190
  <div class="doc doc-contents ">
13338
14191
 
13339
- <p>Attach a field to an existing filter form class.</p>
14192
+ <p>Attach a field to an existing filter form class.</p>
13340
14193
 
13341
14194
  </div>
13342
14195
 
@@ -13353,7 +14206,7 @@ Then verify that any requested RelationshipAssociations do not violate relations
13353
14206
 
13354
14207
  <div class="doc doc-contents ">
13355
14208
 
13356
- <p>Expand an alphabetic pattern into a list of strings.</p>
14209
+ <p>Expand an alphabetic pattern into a list of strings.</p>
13357
14210
 
13358
14211
  </div>
13359
14212
 
@@ -13370,7 +14223,7 @@ Then verify that any requested RelationshipAssociations do not violate relations
13370
14223
 
13371
14224
  <div class="doc doc-contents ">
13372
14225
 
13373
- <p>Expand an IP address pattern into a list of strings. Examples:
14226
+ <p>Expand an IP address pattern into a list of strings. Examples:
13374
14227
  '192.0.2.[1,2,100-250]/24' =&gt; ['192.0.2.1/24', '192.0.2.2/24', '192.0.2.100/24' ... '192.0.2.250/24']
13375
14228
  '2001:db8:0:[0,fd-ff]::/64' =&gt; ['2001:db8:0:0::/64', '2001:db8:0:fd::/64', ... '2001:db8:0:ff::/64']</p>
13376
14229
 
@@ -13389,7 +14242,7 @@ Then verify that any requested RelationshipAssociations do not violate relations
13389
14242
 
13390
14243
  <div class="doc doc-contents ">
13391
14244
 
13392
- <p>Return a Form class with the specified fields derived from a model. This is useful when we need a form to be used
14245
+ <p>Return a Form class with the specified fields derived from a model. This is useful when we need a form to be used
13393
14246
  for creating objects, but want to avoid the model's validation (e.g. for bulk create/edit functions). All fields
13394
14247
  are marked as not required.</p>
13395
14248
 
@@ -13408,7 +14261,7 @@ are marked as not required.</p>
13408
14261
 
13409
14262
  <div class="doc doc-contents ">
13410
14263
 
13411
- <p>Expand an alphanumeric range (continuous or not) into a list.
14264
+ <p>Expand an alphanumeric range (continuous or not) into a list.
13412
14265
  'a-d,f' =&gt; [a, b, c, d, f]
13413
14266
  '0-3,a-d' =&gt; [0, 1, 2, 3, a, b, c, d]</p>
13414
14267
 
@@ -13427,7 +14280,7 @@ are marked as not required.</p>
13427
14280
 
13428
14281
  <div class="doc doc-contents ">
13429
14282
 
13430
- <p>Expand a numeric range (continuous or not) into a sorted decimal or
14283
+ <p>Expand a numeric range (continuous or not) into a sorted decimal or
13431
14284
  hexadecimal list, as specified by the base parameter
13432
14285
  '0-3,5' =&gt; [0, 1, 2, 3, 5]
13433
14286
  '2,8-b,d,f' =&gt; [2, 8, 9, a, b, d, f]</p>
@@ -13447,7 +14300,7 @@ hexadecimal list, as specified by the base parameter
13447
14300
 
13448
14301
  <div class="doc doc-contents ">
13449
14302
 
13450
- <p>Restrict all form fields which reference a RestrictedQuerySet. This ensures that users see only permitted objects
14303
+ <p>Restrict all form fields which reference a RestrictedQuerySet. This ensures that users see only permitted objects
13451
14304
  as available choices.</p>
13452
14305
 
13453
14306
  </div>
@@ -13604,10 +14457,10 @@ as available choices.</p>
13604
14457
  </div>
13605
14458
 
13606
14459
 
13607
- <script id="__config" type="application/json">{"base": "../../..", "features": ["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>
14460
+ <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>
13608
14461
 
13609
14462
 
13610
- <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
14463
+ <script src="../../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
13611
14464
 
13612
14465
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
13613
14466