nautobot 2.4.16__py3-none-any.whl → 2.4.17__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 (370) hide show
  1. nautobot/apps/utils.py +2 -0
  2. nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +3 -3
  3. nautobot/cloud/views.py +7 -0
  4. nautobot/core/apps/__init__.py +1 -0
  5. nautobot/core/celery/__init__.py +2 -1
  6. nautobot/core/templates/components/panel/panel.html +1 -1
  7. nautobot/core/templates/inc/paginator.html +3 -3
  8. nautobot/core/templates/inc/table.html +2 -2
  9. nautobot/core/templatetags/helpers.py +80 -6
  10. nautobot/core/testing/mixins.py +1 -1
  11. nautobot/core/testing/views.py +2 -4
  12. nautobot/core/ui/bulk_buttons.py +53 -53
  13. nautobot/core/ui/object_detail.py +9 -4
  14. nautobot/core/utils/data.py +13 -0
  15. nautobot/core/utils/deprecation.py +2 -0
  16. nautobot/dcim/migrations/0073_alter_powerport_power_factor_and_more.py +41 -0
  17. nautobot/dcim/models/device_component_templates.py +4 -2
  18. nautobot/dcim/models/device_components.py +3 -2
  19. nautobot/dcim/templates/dcim/rack_elevation_list.html +4 -4
  20. nautobot/dcim/views.py +9 -0
  21. nautobot/extras/models/customfields.py +45 -9
  22. nautobot/extras/templates/extras/configcontext_retrieve.html +1 -1
  23. nautobot/extras/templates/extras/configcontext_update.html +49 -49
  24. nautobot/extras/templates/extras/configcontextschema_retrieve.html +47 -47
  25. nautobot/extras/templates/extras/configcontextschema_update.html +18 -18
  26. nautobot/extras/templates/extras/inc/job_table.html +1 -1
  27. nautobot/extras/templates/extras/inc/object_contact_header.html +2 -2
  28. nautobot/extras/templates/extras/note_retrieve.html +53 -53
  29. nautobot/extras/templates/extras/tag_retrieve.html +1 -1
  30. nautobot/extras/templates/extras/tag_update.html +14 -14
  31. nautobot/extras/templates/extras/team_retrieve.html +1 -1
  32. nautobot/extras/tests/test_models.py +216 -0
  33. nautobot/extras/tests/test_views.py +2 -2
  34. nautobot/extras/views.py +1 -0
  35. nautobot/ipam/apps.py +1 -0
  36. nautobot/ipam/jobs/__init__.py +10 -0
  37. nautobot/ipam/jobs/cleanup.py +296 -0
  38. nautobot/ipam/models.py +301 -178
  39. nautobot/ipam/templates/ipam/inc/ipadress_edit_header.html +3 -3
  40. nautobot/ipam/templates/ipam/inc/toggle_available.html +2 -2
  41. nautobot/ipam/templates/ipam/ipaddress_assign.html +1 -1
  42. nautobot/ipam/templates/ipam/prefix_list.html +1 -1
  43. nautobot/ipam/templates/ipam/vlan_retrieve.html +1 -77
  44. nautobot/ipam/tests/test_jobs.py +454 -0
  45. nautobot/ipam/tests/test_models.py +290 -122
  46. nautobot/ipam/tests/test_views.py +40 -164
  47. nautobot/ipam/urls.py +0 -11
  48. nautobot/ipam/utils/testing.py +9 -4
  49. nautobot/ipam/views.py +166 -235
  50. nautobot/project-static/docs/404.html +9 -6
  51. nautobot/project-static/docs/apps/index.html +9 -6
  52. nautobot/project-static/docs/apps/nautobot-apps.html +9 -6
  53. nautobot/project-static/docs/assets/javascripts/bundle.92b07e13.min.js +16 -0
  54. nautobot/project-static/docs/assets/javascripts/{bundle.50899def.min.js.map → bundle.92b07e13.min.js.map} +2 -2
  55. nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js → search.973d3a69.min.js} +4 -4
  56. nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js.map → search.973d3a69.min.js.map} +1 -1
  57. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +9 -6
  58. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +9 -6
  59. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +9 -6
  60. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +9 -6
  61. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +10 -7
  62. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +9 -6
  63. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +9 -6
  64. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +9 -6
  65. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +9 -6
  66. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +9 -6
  67. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +9 -6
  68. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +9 -6
  69. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +9 -6
  70. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +9 -6
  71. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +9 -6
  72. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +11 -8
  73. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +9 -6
  74. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +9 -6
  75. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +11 -8
  76. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +9 -6
  77. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +28 -9
  78. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +9 -6
  79. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +69 -7
  80. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +9 -6
  81. nautobot/project-static/docs/development/apps/api/configuration-view.html +13 -10
  82. nautobot/project-static/docs/development/apps/api/database-backend-config.html +11 -8
  83. nautobot/project-static/docs/development/apps/api/models/django-admin.html +13 -10
  84. nautobot/project-static/docs/development/apps/api/models/global-search.html +10 -7
  85. nautobot/project-static/docs/development/apps/api/models/graphql.html +18 -15
  86. nautobot/project-static/docs/development/apps/api/models/index.html +14 -11
  87. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +11 -8
  88. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +15 -12
  89. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +9 -6
  90. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +15 -12
  91. nautobot/project-static/docs/development/apps/api/platform-features/index.html +9 -6
  92. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +11 -8
  93. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +16 -13
  94. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +12 -10305
  95. nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +10722 -0
  96. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +15 -12
  97. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +14 -11
  98. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +9 -6
  99. nautobot/project-static/docs/development/apps/api/prometheus.html +15 -12
  100. nautobot/project-static/docs/development/apps/api/setup.html +9 -6
  101. nautobot/project-static/docs/development/apps/api/testing.html +9 -6
  102. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +12 -9
  103. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +9 -6
  104. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +9 -6
  105. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +9 -6
  106. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +20 -17
  107. nautobot/project-static/docs/development/apps/api/views/base-template.html +9 -6
  108. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +15 -12
  109. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +14 -11
  110. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +9 -6
  111. nautobot/project-static/docs/development/apps/api/views/index.html +9 -6
  112. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +10 -7
  113. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +24 -21
  114. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +12 -9
  115. nautobot/project-static/docs/development/apps/api/views/notes.html +10 -7
  116. nautobot/project-static/docs/development/apps/api/views/rest-api.html +19 -16
  117. nautobot/project-static/docs/development/apps/api/views/urls.html +11 -8
  118. nautobot/project-static/docs/development/apps/index.html +9 -6
  119. nautobot/project-static/docs/development/apps/migration/code-updates.html +19 -16
  120. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +9 -6
  121. nautobot/project-static/docs/development/apps/migration/from-v1.html +9 -6
  122. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +22 -19
  123. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +9 -6
  124. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +9 -6
  125. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +9 -6
  126. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +9 -6
  127. nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +14 -11
  128. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +27 -24
  129. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +20 -17
  130. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +20 -17
  131. nautobot/project-static/docs/development/apps/porting-from-netbox.html +9 -6
  132. nautobot/project-static/docs/development/core/application-registry.html +23 -20
  133. nautobot/project-static/docs/development/core/best-practices.html +23 -20
  134. nautobot/project-static/docs/development/core/bootstrap-ui.html +9 -6
  135. nautobot/project-static/docs/development/core/caching.html +9 -6
  136. nautobot/project-static/docs/development/core/controllers.html +9 -6
  137. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +10 -7
  138. nautobot/project-static/docs/development/core/generic-views.html +9 -6
  139. nautobot/project-static/docs/development/core/getting-started.html +9 -6
  140. nautobot/project-static/docs/development/core/homepage.html +12 -9
  141. nautobot/project-static/docs/development/core/index.html +9 -6
  142. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9 -6
  143. nautobot/project-static/docs/development/core/model-checklist.html +9 -6
  144. nautobot/project-static/docs/development/core/model-features.html +11 -8
  145. nautobot/project-static/docs/development/core/natural-keys.html +21 -18
  146. nautobot/project-static/docs/development/core/navigation-menu.html +10 -7
  147. nautobot/project-static/docs/development/core/release-checklist.html +9 -6
  148. nautobot/project-static/docs/development/core/role-internals.html +9 -6
  149. nautobot/project-static/docs/development/core/settings.html +9 -6
  150. nautobot/project-static/docs/development/core/style-guide.html +32 -29
  151. nautobot/project-static/docs/development/core/templates.html +9 -6
  152. nautobot/project-static/docs/development/core/testing.html +10 -7
  153. nautobot/project-static/docs/development/core/ui-component-framework.html +36 -33
  154. nautobot/project-static/docs/development/core/user-preferences.html +9 -6
  155. nautobot/project-static/docs/development/index.html +9 -6
  156. nautobot/project-static/docs/development/jobs/getting-started.html +13 -10
  157. nautobot/project-static/docs/development/jobs/index.html +9 -6
  158. nautobot/project-static/docs/development/jobs/installation.html +23 -20
  159. nautobot/project-static/docs/development/jobs/job-extensions.html +25 -22
  160. nautobot/project-static/docs/development/jobs/job-logging.html +12 -9
  161. nautobot/project-static/docs/development/jobs/job-patterns.html +45 -42
  162. nautobot/project-static/docs/development/jobs/job-structure.html +53 -50
  163. nautobot/project-static/docs/development/jobs/migration/from-v1.html +23 -20
  164. nautobot/project-static/docs/development/jobs/testing.html +14 -11
  165. nautobot/project-static/docs/index.html +9 -6
  166. nautobot/project-static/docs/objects.inv +0 -0
  167. nautobot/project-static/docs/overview/application_stack.html +9 -6
  168. nautobot/project-static/docs/overview/design_philosophy.html +9 -6
  169. nautobot/project-static/docs/release-notes/index.html +9 -6
  170. nautobot/project-static/docs/release-notes/version-1.0.html +9 -6
  171. nautobot/project-static/docs/release-notes/version-1.1.html +9 -6
  172. nautobot/project-static/docs/release-notes/version-1.2.html +10 -7
  173. nautobot/project-static/docs/release-notes/version-1.3.html +9 -6
  174. nautobot/project-static/docs/release-notes/version-1.4.html +9 -6
  175. nautobot/project-static/docs/release-notes/version-1.5.html +13 -10
  176. nautobot/project-static/docs/release-notes/version-1.6.html +9 -6
  177. nautobot/project-static/docs/release-notes/version-2.0.html +9 -6
  178. nautobot/project-static/docs/release-notes/version-2.1.html +9 -6
  179. nautobot/project-static/docs/release-notes/version-2.2.html +9 -6
  180. nautobot/project-static/docs/release-notes/version-2.3.html +9 -6
  181. nautobot/project-static/docs/release-notes/version-2.4.html +267 -6
  182. nautobot/project-static/docs/requirements.txt +2 -2
  183. nautobot/project-static/docs/search/search_index.json +1 -1
  184. nautobot/project-static/docs/sitemap.xml +301 -301
  185. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  186. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +15 -12
  187. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +9 -6
  188. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +16 -13
  189. nautobot/project-static/docs/user-guide/administration/configuration/index.html +9 -6
  190. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +9 -6
  191. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +11 -8
  192. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +9 -6
  193. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +9 -6
  194. nautobot/project-static/docs/user-guide/administration/guides/docker.html +9 -6
  195. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +9 -6
  196. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +9 -6
  197. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +9 -6
  198. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +9 -6
  199. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +9 -6
  200. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +16 -13
  201. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +9 -6
  202. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +9 -6
  203. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +9 -6
  204. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +9 -6
  205. nautobot/project-static/docs/user-guide/administration/installation/index.html +9 -6
  206. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +9 -6
  207. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +9 -6
  208. nautobot/project-static/docs/user-guide/administration/installation/services.html +12 -9
  209. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +13 -10
  210. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +10 -7
  211. nautobot/project-static/docs/user-guide/administration/security/index.html +9 -6
  212. nautobot/project-static/docs/user-guide/administration/security/notices.html +9 -6
  213. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +9 -6
  214. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +10 -7
  215. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +9 -6
  216. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +9 -6
  217. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +9 -6
  218. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +9 -6
  219. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +9 -6
  220. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +9 -6
  221. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +9 -6
  222. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +15 -12
  223. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +9 -6
  224. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +9 -6
  225. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +9 -6
  226. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +9 -6
  227. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +9 -6
  228. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +9 -6
  229. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +9 -6
  230. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +9 -6
  231. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +9 -6
  232. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +9 -6
  233. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +9 -6
  234. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +9 -6
  235. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +9 -6
  236. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +9 -6
  237. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +9 -6
  238. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +9 -6
  239. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +9 -6
  240. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +9 -6
  241. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +9 -6
  242. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +9 -6
  243. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +9 -6
  244. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +9 -6
  245. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +9 -6
  246. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +9 -6
  247. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +13 -10
  248. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +9 -6
  249. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +9 -6
  250. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +9 -6
  251. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +9 -6
  252. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +9 -6
  253. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +9 -6
  254. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +9 -6
  255. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +9 -6
  256. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +9 -6
  257. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +9 -6
  258. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +9 -6
  259. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +9 -6
  260. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +9 -6
  261. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +9 -6
  262. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +9 -6
  263. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +9 -6
  264. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +9 -6
  265. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +9 -6
  266. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +9 -6
  267. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +9 -6
  268. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +9 -6
  269. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +9 -6
  270. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +9 -6
  271. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +9 -6
  272. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +9 -6
  273. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +9 -6
  274. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +9 -6
  275. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +9 -6
  276. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +9 -6
  277. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +9 -6
  278. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +9 -6
  279. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +9 -6
  280. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +9 -6
  281. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +11 -8
  282. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +11 -8
  283. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +41 -41
  284. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +9 -6
  285. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +197 -54
  286. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +9 -6
  287. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +9 -6
  288. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +9 -6
  289. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +9 -6
  290. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +9 -6
  291. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +9 -6
  292. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +9 -6
  293. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +9 -6
  294. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +9 -6
  295. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +9 -6
  296. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +9 -6
  297. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +9 -6
  298. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +9 -6
  299. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +9 -6
  300. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +9 -6
  301. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +9 -6
  302. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +9 -6
  303. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +9 -6
  304. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +9 -6
  305. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +9 -6
  306. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +9 -6
  307. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +9 -6
  308. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +9 -6
  309. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +9 -6
  310. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +9 -6
  311. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +9 -6
  312. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +9 -6
  313. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +9 -6
  314. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +9 -6
  315. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +9 -6
  316. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +13 -10
  317. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +9 -6
  318. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +9 -6
  319. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +9 -6
  320. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9 -6
  321. nautobot/project-static/docs/user-guide/index.html +9 -6
  322. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +9 -6
  323. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +9 -6
  324. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +10 -7
  325. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +9 -6
  326. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +9 -6
  327. nautobot/project-static/docs/user-guide/platform-functionality/events.html +11 -8
  328. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +9 -6
  329. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +9 -6
  330. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +9 -6
  331. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +9 -6
  332. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +9 -6
  333. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +9 -6
  334. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +9 -6
  335. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +9 -6
  336. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +9 -6
  337. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +9 -6
  338. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +9 -6
  339. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9 -6
  340. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +9 -6
  341. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +9 -6
  342. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +9 -6
  343. nautobot/project-static/docs/user-guide/platform-functionality/note.html +9 -6
  344. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +12 -9
  345. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +9 -6
  346. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +9 -6
  347. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +9 -6
  348. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +9 -6
  349. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +9 -6
  350. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +9 -6
  351. nautobot/project-static/docs/user-guide/platform-functionality/role.html +9 -6
  352. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +9 -6
  353. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +11 -8
  354. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +9 -6
  355. nautobot/project-static/docs/user-guide/platform-functionality/status.html +9 -6
  356. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +9 -6
  357. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +9 -6
  358. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +9 -6
  359. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +9 -6
  360. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +9 -6
  361. nautobot/project-static/fonts/UFL.txt +96 -96
  362. nautobot/project-static/js/forms.js +35 -2
  363. nautobot/virtualization/filters.py +7 -0
  364. {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/METADATA +6 -6
  365. {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/RECORD +369 -364
  366. nautobot/project-static/docs/assets/javascripts/bundle.50899def.min.js +0 -16
  367. {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/LICENSE.txt +0 -0
  368. {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/NOTICE +0 -0
  369. {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/WHEEL +0 -0
  370. {nautobot-2.4.16.dist-info → nautobot-2.4.17.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.6.16">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
22
22
 
23
23
 
24
24
 
@@ -35,6 +35,8 @@
35
35
 
36
36
 
37
37
 
38
+
39
+
38
40
 
39
41
 
40
42
 
@@ -7408,12 +7410,12 @@
7408
7410
 
7409
7411
 
7410
7412
  <li class="md-nav__item">
7411
- <a href="../platform-features/populating-extensibility-features.html" class="md-nav__link">
7413
+ <a href="../platform-features/prepopulating-data.html" class="md-nav__link">
7412
7414
 
7413
7415
 
7414
7416
 
7415
7417
  <span class="md-ellipsis">
7416
- Populating Extensibility Features
7418
+ Prepopulating Data
7417
7419
 
7418
7420
  </span>
7419
7421
 
@@ -10102,14 +10104,14 @@
10102
10104
  <h1 id="using-the-django-admin-interface">Using the Django Admin Interface<a class="headerlink" href="#using-the-django-admin-interface" title="Permanent link">&para;</a></h1>
10103
10105
  <p>Apps can optionally expose their models via Django's built-in <a href="https://docs.djangoproject.com/en/stable/ref/contrib/admin/">administrative interface</a>. This can greatly improve troubleshooting ability, particularly during development. To expose a model, simply register it using Django's <code>admin.register()</code> function. An example <code>admin.py</code> file for the above model is shown below:</p>
10104
10106
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># admin.py</span>
10105
- <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span> <span class="nn">django.contrib</span> <span class="kn">import</span> <span class="n">admin</span>
10106
- <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="kn">from</span> <span class="nn">nautobot.apps.admin</span> <span class="kn">import</span> <span class="n">NautobotModelAdmin</span>
10107
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">django.contrib</span><span class="w"> </span><span class="kn">import</span> <span class="n">admin</span>
10108
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot.apps.admin</span><span class="w"> </span><span class="kn">import</span> <span class="n">NautobotModelAdmin</span>
10107
10109
  <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>
10108
- <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">from</span> <span class="nn">.models</span> <span class="kn">import</span> <span class="n">Animal</span>
10110
+ <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">from</span><span class="w"> </span><span class="nn">.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">Animal</span>
10109
10111
  <a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>
10110
10112
  <a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>
10111
10113
  <a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="nd">@admin</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">Animal</span><span class="p">)</span>
10112
- <a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="k">class</span> <span class="nc">AnimalAdmin</span><span class="p">(</span><span class="n">NautobotModelAdmin</span><span class="p">):</span>
10114
+ <a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="k">class</span><span class="w"> </span><span class="nc">AnimalAdmin</span><span class="p">(</span><span class="n">NautobotModelAdmin</span><span class="p">):</span>
10113
10115
  <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="n">list_display</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span> <span class="s1">&#39;sound&#39;</span><span class="p">)</span>
10114
10116
  </code></pre></div>
10115
10117
  <p>This will display the app and its model in the admin UI. Staff users can create, change, and delete model instances via the admin UI without needing to create a custom view.</p>
@@ -10203,7 +10205,8 @@
10203
10205
  <!-- RTD version flyout injected on live site -->
10204
10206
  <div id="readthedocs-embed-flyout"></div>
10205
10207
 
10206
- <div class="md-social">
10208
+
10209
+ <div class="md-social">
10207
10210
 
10208
10211
 
10209
10212
 
@@ -10259,10 +10262,10 @@
10259
10262
 
10260
10263
 
10261
10264
 
10262
- <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.d50fe291.min.js", "tags": null, "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"}, "version": null}</script>
10265
+ <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.973d3a69.min.js", "tags": null, "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"}, "version": null}</script>
10263
10266
 
10264
10267
 
10265
- <script src="../../../../assets/javascripts/bundle.50899def.min.js"></script>
10268
+ <script src="../../../../assets/javascripts/bundle.92b07e13.min.js"></script>
10266
10269
 
10267
10270
 
10268
10271
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
@@ -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.6.16">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
22
22
 
23
23
 
24
24
 
@@ -35,6 +35,8 @@
35
35
 
36
36
 
37
37
 
38
+
39
+
38
40
 
39
41
 
40
42
 
@@ -7408,12 +7410,12 @@
7408
7410
 
7409
7411
 
7410
7412
  <li class="md-nav__item">
7411
- <a href="../platform-features/populating-extensibility-features.html" class="md-nav__link">
7413
+ <a href="../platform-features/prepopulating-data.html" class="md-nav__link">
7412
7414
 
7413
7415
 
7414
7416
 
7415
7417
  <span class="md-ellipsis">
7416
- Populating Extensibility Features
7418
+ Prepopulating Data
7417
7419
 
7418
7420
  </span>
7419
7421
 
@@ -10104,7 +10106,7 @@
10104
10106
  <summary>Added in version 2.0.0</summary>
10105
10107
  </details>
10106
10108
  <p>Simply define a <code>searchable_models</code> array on the NautobotAppConfig for your app, listing the lowercase names of the model(s) from your app that you wish to include in the Nautobot global search.</p>
10107
- <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="k">class</span> <span class="nc">AnimalSoundsConfig</span><span class="p">(</span><span class="n">NautobotAppConfig</span><span class="p">):</span>
10109
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="k">class</span><span class="w"> </span><span class="nc">AnimalSoundsConfig</span><span class="p">(</span><span class="n">NautobotAppConfig</span><span class="p">):</span>
10108
10110
  <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="o">...</span>
10109
10111
  <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">searchable_models</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;animal&quot;</span><span class="p">]</span>
10110
10112
  </code></pre></div>
@@ -10197,7 +10199,8 @@
10197
10199
  <!-- RTD version flyout injected on live site -->
10198
10200
  <div id="readthedocs-embed-flyout"></div>
10199
10201
 
10200
- <div class="md-social">
10202
+
10203
+ <div class="md-social">
10201
10204
 
10202
10205
 
10203
10206
 
@@ -10253,10 +10256,10 @@
10253
10256
 
10254
10257
 
10255
10258
 
10256
- <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.d50fe291.min.js", "tags": null, "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"}, "version": null}</script>
10259
+ <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.973d3a69.min.js", "tags": null, "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"}, "version": null}</script>
10257
10260
 
10258
10261
 
10259
- <script src="../../../../assets/javascripts/bundle.50899def.min.js"></script>
10262
+ <script src="../../../../assets/javascripts/bundle.92b07e13.min.js"></script>
10260
10263
 
10261
10264
 
10262
10265
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
@@ -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.6.16">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
22
22
 
23
23
 
24
24
 
@@ -35,6 +35,8 @@
35
35
 
36
36
 
37
37
 
38
+
39
+
38
40
 
39
41
 
40
42
 
@@ -7467,12 +7469,12 @@
7467
7469
 
7468
7470
 
7469
7471
  <li class="md-nav__item">
7470
- <a href="../platform-features/populating-extensibility-features.html" class="md-nav__link">
7472
+ <a href="../platform-features/prepopulating-data.html" class="md-nav__link">
7471
7473
 
7472
7474
 
7473
7475
 
7474
7476
  <span class="md-ellipsis">
7475
- Populating Extensibility Features
7477
+ Prepopulating Data
7476
7478
 
7477
7479
  </span>
7478
7480
 
@@ -10209,19 +10211,19 @@
10209
10211
  <h2 id="using-the-extras_features-decorator-for-graphql">Using the <code>@extras_features</code> Decorator for GraphQL<a class="headerlink" href="#using-the-extras_features-decorator-for-graphql" title="Permanent link">&para;</a></h2>
10210
10212
  <p>To expose a model via GraphQL, simply register it using the <code>@extras_features("graphql")</code> decorator. Nautobot will detect this and will automatically create a GraphQL type definition based on the model. Additionally, if a <code>FilterSet</code> is available at <code>&lt;app_name&gt;.filters.&lt;ModelName&gt;FilterSet</code>, Nautobot will automatically use the filterset to generate GraphQL filtering options for this type as well.</p>
10211
10213
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># models.py</span>
10212
- <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">models</span>
10214
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">django.db</span><span class="w"> </span><span class="kn">import</span> <span class="n">models</span>
10213
10215
  <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
10214
- <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">from</span> <span class="nn">nautobot.apps.models</span> <span class="kn">import</span> <span class="n">BaseModel</span><span class="p">,</span> <span class="n">extras_features</span>
10216
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot.apps.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseModel</span><span class="p">,</span> <span class="n">extras_features</span>
10215
10217
  <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>
10216
10218
  <a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>
10217
10219
  <a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="nd">@extras_features</span><span class="p">(</span><span class="s2">&quot;graphql&quot;</span><span class="p">)</span>
10218
- <a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="k">class</span> <span class="nc">Animal</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
10220
+ <a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="k">class</span><span class="w"> </span><span class="nc">Animal</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
10219
10221
  <a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Base model for animals.&quot;&quot;&quot;</span>
10220
10222
  <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a>
10221
10223
  <a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
10222
10224
  <a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a> <span class="n">sound</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
10223
10225
  <a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a>
10224
- <a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10226
+ <a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10225
10227
  <a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
10226
10228
  </code></pre></div>
10227
10229
  <h2 id="creating-your-own-graphql-type-object">Creating Your Own GraphQL Type Object<a class="headerlink" href="#creating-your-own-graphql-type-object" title="Permanent link">&para;</a></h2>
@@ -10233,16 +10235,16 @@
10233
10235
  <p>When defining types this way, do <strong>not</strong> use the <code>@extras_features("graphql")</code> decorator on the corresponding Model class, as no auto-generated GraphQL type is desired for this model.</p>
10234
10236
  </div>
10235
10237
  <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="c1"># graphql/types.py</span>
10236
- <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="kn">import</span> <span class="nn">graphene_django_optimizer</span> <span class="k">as</span> <span class="nn">gql_optimizer</span>
10238
+ <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="kn">import</span><span class="w"> </span><span class="nn">graphene_django_optimizer</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">gql_optimizer</span>
10237
10239
  <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>
10238
- <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="kn">from</span> <span class="nn">nautobot_animal_sounds.models</span> <span class="kn">import</span> <span class="n">Animal</span>
10239
- <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="kn">from</span> <span class="nn">nautobot.core.graphql.types</span> <span class="kn">import</span> <span class="n">OptimizedNautobotObjectType</span>
10240
+ <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot_animal_sounds.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">Animal</span>
10241
+ <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot.core.graphql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">OptimizedNautobotObjectType</span>
10240
10242
  <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>
10241
10243
  <a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>
10242
- <a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="k">class</span> <span class="nc">AnimalType</span><span class="p">(</span><span class="n">OptimizedNautobotObjectType</span><span class="p">):</span>
10244
+ <a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="k">class</span><span class="w"> </span><span class="nc">AnimalType</span><span class="p">(</span><span class="n">OptimizedNautobotObjectType</span><span class="p">):</span>
10243
10245
  <a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;GraphQL Type for Animal&quot;&quot;&quot;</span>
10244
10246
  <a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a>
10245
- <a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
10247
+ <a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a> <span class="k">class</span><span class="w"> </span><span class="nc">Meta</span><span class="p">:</span>
10246
10248
  <a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">Animal</span>
10247
10249
  <a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a> <span class="n">exclude</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;sound&quot;</span><span class="p">]</span>
10248
10250
  <a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a>
@@ -10368,7 +10370,8 @@
10368
10370
  <!-- RTD version flyout injected on live site -->
10369
10371
  <div id="readthedocs-embed-flyout"></div>
10370
10372
 
10371
- <div class="md-social">
10373
+
10374
+ <div class="md-social">
10372
10375
 
10373
10376
 
10374
10377
 
@@ -10424,10 +10427,10 @@
10424
10427
 
10425
10428
 
10426
10429
 
10427
- <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.d50fe291.min.js", "tags": null, "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"}, "version": null}</script>
10430
+ <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.973d3a69.min.js", "tags": null, "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"}, "version": null}</script>
10428
10431
 
10429
10432
 
10430
- <script src="../../../../assets/javascripts/bundle.50899def.min.js"></script>
10433
+ <script src="../../../../assets/javascripts/bundle.92b07e13.min.js"></script>
10431
10434
 
10432
10435
 
10433
10436
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
@@ -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.6.16">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
22
22
 
23
23
 
24
24
 
@@ -35,6 +35,8 @@
35
35
 
36
36
 
37
37
 
38
+
39
+
38
40
 
39
41
 
40
42
 
@@ -7398,12 +7400,12 @@
7398
7400
 
7399
7401
 
7400
7402
  <li class="md-nav__item">
7401
- <a href="../platform-features/populating-extensibility-features.html" class="md-nav__link">
7403
+ <a href="../platform-features/prepopulating-data.html" class="md-nav__link">
7402
7404
 
7403
7405
 
7404
7406
 
7405
7407
  <span class="md-ellipsis">
7406
- Populating Extensibility Features
7408
+ Prepopulating Data
7407
7409
 
7408
7410
  </span>
7409
7411
 
@@ -10219,21 +10221,21 @@
10219
10221
  </details>
10220
10222
  <p>Below is an example <code>models.py</code> file containing a basic model with two character fields:</p>
10221
10223
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># models.py</span>
10222
- <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">models</span>
10224
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">django.db</span><span class="w"> </span><span class="kn">import</span> <span class="n">models</span>
10223
10225
  <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
10224
- <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">from</span> <span class="nn">nautobot.apps.models</span> <span class="kn">import</span> <span class="n">BaseModel</span>
10226
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot.apps.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseModel</span>
10225
10227
  <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>
10226
10228
  <a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>
10227
- <a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="k">class</span> <span class="nc">Animal</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
10229
+ <a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="k">class</span><span class="w"> </span><span class="nc">Animal</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
10228
10230
  <a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Base model for animals.&quot;&quot;&quot;</span>
10229
10231
  <a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a>
10230
10232
  <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
10231
10233
  <a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="n">sound</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
10232
10234
  <a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a>
10233
- <a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10235
+ <a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10234
10236
  <a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
10235
10237
  <a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a>
10236
- <a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
10238
+ <a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a> <span class="k">class</span><span class="w"> </span><span class="nc">Meta</span><span class="p">:</span>
10237
10239
  <a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a> <span class="n">unique_together</span> <span class="o">=</span> <span class="p">[[</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;sound&quot;</span><span class="p">]]</span>
10238
10240
  </code></pre></div>
10239
10241
  <p>Once you have defined the model(s) for your app, you'll need to create the database schema migrations. A migration file is essentially a set of instructions for manipulating the database to support your new model, or to alter existing models.</p>
@@ -10350,7 +10352,8 @@
10350
10352
  <!-- RTD version flyout injected on live site -->
10351
10353
  <div id="readthedocs-embed-flyout"></div>
10352
10354
 
10353
- <div class="md-social">
10355
+
10356
+ <div class="md-social">
10354
10357
 
10355
10358
 
10356
10359
 
@@ -10406,10 +10409,10 @@
10406
10409
 
10407
10410
 
10408
10411
 
10409
- <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.d50fe291.min.js", "tags": null, "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"}, "version": null}</script>
10412
+ <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.973d3a69.min.js", "tags": null, "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"}, "version": null}</script>
10410
10413
 
10411
10414
 
10412
- <script src="../../../../assets/javascripts/bundle.50899def.min.js"></script>
10415
+ <script src="../../../../assets/javascripts/bundle.92b07e13.min.js"></script>
10413
10416
 
10414
10417
 
10415
10418
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
@@ -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.6.16">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
22
22
 
23
23
 
24
24
 
@@ -35,6 +35,8 @@
35
35
 
36
36
 
37
37
 
38
+
39
+
38
40
 
39
41
 
40
42
 
@@ -7465,12 +7467,12 @@
7465
7467
 
7466
7468
 
7467
7469
  <li class="md-nav__item">
7468
- <a href="platform-features/populating-extensibility-features.html" class="md-nav__link">
7470
+ <a href="platform-features/prepopulating-data.html" class="md-nav__link">
7469
7471
 
7470
7472
 
7471
7473
 
7472
7474
  <span class="md-ellipsis">
7473
- Populating Extensibility Features
7475
+ Prepopulating Data
7474
7476
 
7475
7477
  </span>
7476
7478
 
@@ -10193,9 +10195,9 @@
10193
10195
 
10194
10196
  <h1 id="nautobotappconfig">NautobotAppConfig<a class="headerlink" href="#nautobotappconfig" title="Permanent link">&para;</a></h1>
10195
10197
  <p>The <code>NautobotAppConfig</code> class is a Nautobot-specific wrapper around Django's built-in <a href="https://docs.djangoproject.com/en/stable/ref/applications/"><code>AppConfig</code></a> class. It is used to declare Nautobot app functionality within a Python package. Each app should provide its own subclass, defining its name, metadata, and default and required configuration parameters. An example is below:</p>
10196
- <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">NautobotAppConfig</span>
10198
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot.apps</span><span class="w"> </span><span class="kn">import</span> <span class="n">NautobotAppConfig</span>
10197
10199
  <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>
10198
- <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="k">class</span> <span class="nc">AnimalSoundsConfig</span><span class="p">(</span><span class="n">NautobotAppConfig</span><span class="p">):</span>
10200
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="k">class</span><span class="w"> </span><span class="nc">AnimalSoundsConfig</span><span class="p">(</span><span class="n">NautobotAppConfig</span><span class="p">):</span>
10199
10201
  <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;nautobot_animal_sounds&#39;</span>
10200
10202
  <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">verbose_name</span> <span class="o">=</span> <span class="s1">&#39;Animal Sounds&#39;</span>
10201
10203
  <a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="n">description</span> <span class="o">=</span> <span class="s1">&#39;An example app for development purposes&#39;</span>
@@ -10499,7 +10501,8 @@
10499
10501
  <!-- RTD version flyout injected on live site -->
10500
10502
  <div id="readthedocs-embed-flyout"></div>
10501
10503
 
10502
- <div class="md-social">
10504
+
10505
+ <div class="md-social">
10503
10506
 
10504
10507
 
10505
10508
 
@@ -10555,10 +10558,10 @@
10555
10558
 
10556
10559
 
10557
10560
 
10558
- <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.d50fe291.min.js", "tags": null, "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"}, "version": null}</script>
10561
+ <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.973d3a69.min.js", "tags": null, "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"}, "version": null}</script>
10559
10562
 
10560
10563
 
10561
- <script src="../../../assets/javascripts/bundle.50899def.min.js"></script>
10564
+ <script src="../../../assets/javascripts/bundle.92b07e13.min.js"></script>
10562
10565
 
10563
10566
 
10564
10567
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
@@ -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.6.16">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
22
22
 
23
23
 
24
24
 
@@ -35,6 +35,8 @@
35
35
 
36
36
 
37
37
 
38
+
39
+
38
40
 
39
41
 
40
42
 
@@ -7449,12 +7451,12 @@
7449
7451
 
7450
7452
 
7451
7453
  <li class="md-nav__item">
7452
- <a href="populating-extensibility-features.html" class="md-nav__link">
7454
+ <a href="prepopulating-data.html" class="md-nav__link">
7453
7455
 
7454
7456
 
7455
7457
 
7456
7458
  <span class="md-ellipsis">
7457
- Populating Extensibility Features
7459
+ Prepopulating Data
7458
7460
 
7459
7461
  </span>
7460
7462
 
@@ -10163,15 +10165,15 @@
10163
10165
  <p>When a CustomValidator is instantiated, the model instance is assigned to context dictionary using the <code>object</code> key, much like TemplateExtension. E.g. <code>self.context['object']</code>. The context is also populated with the current request user object. E.g. <code>self.context['user']</code>.</p>
10164
10166
  <p>Declared subclasses should be gathered into a list or tuple for integration with Nautobot. By default, Nautobot looks for an iterable named <code>custom_validators</code> within a <code>custom_validators.py</code> file. (This can be overridden by setting <code>custom_validators</code> to a custom value on the app's <code>NautobotAppConfig</code>.) An example is below.</p>
10165
10167
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># custom_validators.py</span>
10166
- <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span> <span class="nn">nautobot.apps.models</span> <span class="kn">import</span> <span class="n">CustomValidator</span>
10168
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot.apps.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">CustomValidator</span>
10167
10169
  <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
10168
10170
  <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>
10169
- <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="k">class</span> <span class="nc">LocationValidator</span><span class="p">(</span><span class="n">CustomValidator</span><span class="p">):</span>
10171
+ <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="k">class</span><span class="w"> </span><span class="nc">LocationValidator</span><span class="p">(</span><span class="n">CustomValidator</span><span class="p">):</span>
10170
10172
  <a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Custom validator for Locations to enforce that they must have a Tenant.&quot;&quot;&quot;</span>
10171
10173
  <a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>
10172
10174
  <a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="n">model</span> <span class="o">=</span> <span class="s1">&#39;dcim.location&#39;</span>
10173
10175
  <a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a>
10174
- <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10176
+ <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="k">def</span><span class="w"> </span><span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10175
10177
  <a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">[</span><span class="s1">&#39;object&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">tenant</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
10176
10178
  <a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a> <span class="c1"># Enforce that all locations must have a tenant</span>
10177
10179
  <a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="bp">self</span><span class="o">.</span><span class="n">validation_error</span><span class="p">({</span>
@@ -10189,15 +10191,15 @@
10189
10191
  <p>With the user object, you can inspect the groups and permissions that the user has, allowing more granular access related validation.</p>
10190
10192
  <p>This example shows a custom validator that only allows users in the group "Tenant Managers" to change the tenant of a location:</p>
10191
10193
  <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="c1"># custom_validators.py</span>
10192
- <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="kn">from</span> <span class="nn">nautobot.apps.models</span> <span class="kn">import</span> <span class="n">CustomValidator</span>
10194
+ <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">nautobot.apps.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">CustomValidator</span>
10193
10195
  <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>
10194
10196
  <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>
10195
- <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="k">class</span> <span class="nc">LocationTenantValidator</span><span class="p">(</span><span class="n">CustomValidator</span><span class="p">):</span>
10197
+ <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="k">class</span><span class="w"> </span><span class="nc">LocationTenantValidator</span><span class="p">(</span><span class="n">CustomValidator</span><span class="p">):</span>
10196
10198
  <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Custom validator for Locations to enforce that only some users can update the Tenant.&quot;&quot;&quot;</span>
10197
10199
  <a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>
10198
10200
  <a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a> <span class="n">model</span> <span class="o">=</span> <span class="s1">&#39;dcim.location&#39;</span>
10199
10201
  <a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a>
10200
- <a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10202
+ <a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a> <span class="k">def</span><span class="w"> </span><span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
10201
10203
  <a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a> <span class="n">new_object_state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">[</span><span class="s2">&quot;object&quot;</span><span class="p">]</span>
10202
10204
  <a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">new_object_state</span><span class="o">.</span><span class="n">present_in_database</span><span class="p">:</span>
10203
10205
  <a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a> <span class="c1"># This is a brand new Location, so skip the rest of the checks here</span>
@@ -10307,7 +10309,8 @@
10307
10309
  <!-- RTD version flyout injected on live site -->
10308
10310
  <div id="readthedocs-embed-flyout"></div>
10309
10311
 
10310
- <div class="md-social">
10312
+
10313
+ <div class="md-social">
10311
10314
 
10312
10315
 
10313
10316
 
@@ -10363,10 +10366,10 @@
10363
10366
 
10364
10367
 
10365
10368
 
10366
- <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.d50fe291.min.js", "tags": null, "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"}, "version": null}</script>
10369
+ <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.973d3a69.min.js", "tags": null, "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"}, "version": null}</script>
10367
10370
 
10368
10371
 
10369
- <script src="../../../../assets/javascripts/bundle.50899def.min.js"></script>
10372
+ <script src="../../../../assets/javascripts/bundle.92b07e13.min.js"></script>
10370
10373
 
10371
10374
 
10372
10375
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});