nautobot 2.0.5__py3-none-any.whl → 2.1.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nautobot might be problematic. Click here for more details.
- nautobot/circuits/navigation.py +0 -25
- nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -9
- nautobot/circuits/templates/circuits/providernetwork_retrieve.html +0 -2
- nautobot/circuits/tests/test_filters.py +1 -0
- nautobot/core/api/serializers.py +15 -5
- nautobot/core/api/views.py +18 -19
- nautobot/core/choices.py +1 -1
- nautobot/core/filters.py +12 -4
- nautobot/core/jobs/__init__.py +125 -3
- nautobot/core/management/commands/generate_test_data.py +4 -1
- nautobot/core/models/fields.py +12 -2
- nautobot/core/settings.py +8 -7
- nautobot/core/templates/base_django.html +2 -2
- nautobot/core/templates/buttons/export.html +57 -30
- nautobot/core/templates/generic/object_list.html +2 -2
- nautobot/core/templates/generic/object_retrieve.html +8 -1
- nautobot/core/templates/home.html +5 -5
- nautobot/core/templates/inc/created_updated.html +2 -2
- nautobot/core/templates/inc/footer.html +2 -2
- nautobot/core/templates/inc/javascript.html +0 -10
- nautobot/core/templates/inc/media.html +2 -0
- nautobot/core/templates/inc/nav_menu.html +66 -68
- nautobot/core/templates/inc/object_details_advanced_panel.html +19 -0
- nautobot/core/templates/nautobot_config.py.j2 +10 -4
- nautobot/core/templates/panel_table.html +1 -1
- nautobot/core/templates/template.css +89 -0
- nautobot/core/templates/utilities/templatetags/table_config_form.html +1 -0
- nautobot/core/templatetags/buttons.py +7 -2
- nautobot/core/testing/views.py +34 -4
- nautobot/core/tests/integration/test_home.py +1 -43
- nautobot/core/tests/integration/test_navbar.py +10 -64
- nautobot/core/tests/integration/test_plugin_home.py +4 -5
- nautobot/core/tests/integration/test_plugin_navbar.py +20 -16
- nautobot/core/tests/integration/test_theme.py +4 -0
- nautobot/core/tests/test_api.py +14 -66
- nautobot/core/tests/test_filters.py +127 -0
- nautobot/core/tests/test_forms.py +1 -1
- nautobot/core/tests/test_graphql.py +165 -2
- nautobot/core/tests/test_jobs.py +112 -0
- nautobot/core/tests/test_openapi.py +6 -0
- nautobot/core/tests/test_views.py +11 -85
- nautobot/core/urls.py +6 -1
- nautobot/core/utils/lookup.py +28 -0
- nautobot/core/utils/requests.py +2 -3
- nautobot/core/views/__init__.py +3 -4
- nautobot/core/views/generic.py +9 -4
- nautobot/core/views/mixins.py +4 -2
- nautobot/core/views/renderers.py +5 -0
- nautobot/dcim/models/device_components.py +1 -0
- nautobot/dcim/navigation.py +10 -165
- nautobot/dcim/templates/dcim/location.html +1 -1
- nautobot/dcim/tests/features/locations.feature +143 -0
- nautobot/dcim/tests/test_api.py +1 -1
- nautobot/dcim/tests/test_filters.py +11 -3
- nautobot/extras/admin.py +1 -1
- nautobot/extras/api/serializers.py +33 -0
- nautobot/extras/api/urls.py +6 -0
- nautobot/extras/api/views.py +45 -6
- nautobot/extras/factory.py +28 -2
- nautobot/extras/filters/__init__.py +52 -0
- nautobot/extras/filters/mixins.py +4 -29
- nautobot/extras/forms/forms.py +43 -0
- nautobot/extras/jobs.py +31 -9
- nautobot/extras/migrations/0100_fileproxy_job_result.py +32 -0
- nautobot/extras/migrations/0101_externalintegration.py +61 -0
- nautobot/extras/migrations/0102_set_null_objectchange_contenttype.py +32 -0
- nautobot/extras/models/__init__.py +2 -0
- nautobot/extras/models/change_logging.py +2 -2
- nautobot/extras/models/models.py +96 -16
- nautobot/extras/navigation.py +17 -29
- nautobot/extras/signals.py +15 -0
- nautobot/extras/tables.py +27 -0
- nautobot/extras/templates/extras/externalintegration_retrieve.html +37 -0
- nautobot/extras/templates/extras/inc/jobresult.html +24 -0
- nautobot/extras/templates/extras/jobresult.html +24 -0
- nautobot/extras/test_jobs/file_output.py +16 -0
- nautobot/extras/tests/test_api.py +92 -0
- nautobot/extras/tests/test_filters.py +64 -2
- nautobot/extras/tests/test_jobs.py +39 -0
- nautobot/extras/tests/test_models.py +34 -0
- nautobot/extras/tests/test_views.py +22 -2
- nautobot/extras/urls.py +1 -0
- nautobot/extras/views.py +15 -0
- nautobot/ipam/forms.py +16 -0
- nautobot/ipam/models.py +3 -0
- nautobot/ipam/navigation.py +2 -59
- nautobot/ipam/templates/ipam/ipaddress.html +0 -9
- nautobot/ipam/templates/ipam/prefix.html +0 -9
- nautobot/ipam/tests/features/prefixes.feature +134 -0
- nautobot/ipam/tests/test_filters.py +5 -10
- nautobot/ipam/tests/test_views.py +8 -1
- nautobot/ipam/views.py +3 -0
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css +191 -191
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +874 -881
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
- nautobot/project-static/css/base.css +135 -99
- nautobot/project-static/css/dark.css +65 -6
- nautobot/project-static/docs/404.html +44 -16
- nautobot/project-static/docs/apps/index.html +44 -16
- nautobot/project-static/docs/apps/nautobot-apps.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +1597 -1457
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +45 -17
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +353 -432
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +66 -38
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2154 -2307
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +807 -691
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +58 -30
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +3600 -3456
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +101 -75
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +3083 -3019
- nautobot/project-static/docs/development/apps/api/configuration-view.html +44 -16
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/global-search.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/graphql.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +44 -16
- nautobot/project-static/docs/development/apps/api/prometheus.html +44 -16
- nautobot/project-static/docs/development/apps/api/setup.html +44 -16
- nautobot/project-static/docs/development/apps/api/testing.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/tabs.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/base-template.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/notes.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/urls.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/view-overrides.html +44 -16
- nautobot/project-static/docs/development/apps/index.html +44 -16
- nautobot/project-static/docs/development/apps/migration/code-updates.html +44 -16
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +44 -16
- nautobot/project-static/docs/development/apps/migration/from-v1.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +44 -16
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +44 -16
- nautobot/project-static/docs/development/core/application-registry.html +44 -16
- nautobot/project-static/docs/development/core/best-practices.html +44 -16
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +44 -16
- nautobot/project-static/docs/development/core/extending-models.html +44 -16
- nautobot/project-static/docs/development/core/generic-views.html +44 -16
- nautobot/project-static/docs/development/core/getting-started.html +44 -16
- nautobot/project-static/docs/development/core/homepage.html +44 -16
- nautobot/project-static/docs/development/core/index.html +44 -16
- nautobot/project-static/docs/development/core/model-features.html +44 -16
- nautobot/project-static/docs/development/core/natural-keys.html +44 -16
- nautobot/project-static/docs/development/core/navigation-menu.html +44 -21
- nautobot/project-static/docs/development/core/react-ui.html +44 -16
- nautobot/project-static/docs/development/core/release-checklist.html +44 -16
- nautobot/project-static/docs/development/core/role-internals.html +44 -16
- nautobot/project-static/docs/development/core/style-guide.html +44 -16
- nautobot/project-static/docs/development/core/templates.html +44 -16
- nautobot/project-static/docs/development/core/testing.html +44 -16
- nautobot/project-static/docs/development/core/user-preferences.html +44 -16
- nautobot/project-static/docs/development/index.html +44 -16
- nautobot/project-static/docs/development/jobs/index.html +280 -234
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +44 -16
- nautobot/project-static/docs/index.html +44 -16
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/release-notes/index.html +47 -19
- nautobot/project-static/docs/release-notes/version-1.0.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.1.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.2.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.3.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.4.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.5.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.6.html +44 -16
- nautobot/project-static/docs/release-notes/version-2.0.html +47 -19
- nautobot/project-static/docs/release-notes/version-2.1.html +5724 -0
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +247 -237
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +109 -43
- nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/caching.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +48 -19
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/docker.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/index.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/services.html +44 -16
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +44 -16
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +44 -16
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +44 -16
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +44 -16
- nautobot/project-static/docs/user-guide/index.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +110 -16
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +47 -19
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +5359 -0
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +47 -19
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +113 -44
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +44 -16
- nautobot/project-static/fonts/UFL.txt +96 -0
- nautobot/project-static/fonts/Ubuntu-Bold.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-BoldItalic.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-Italic.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-Medium.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-MediumItalic.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-Regular.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-Bold.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-BoldItalic.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-Italic.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-Regular.woff2 +0 -0
- nautobot/project-static/img/dark-theme.png +0 -0
- nautobot/project-static/img/light-theme.png +0 -0
- nautobot/project-static/img/nautobot_chevron.svg +5 -0
- nautobot/project-static/img/nautobot_chevron_header.svg +5 -0
- nautobot/project-static/img/system-theme.png +0 -0
- nautobot/tenancy/navigation.py +0 -13
- nautobot/ui/package-lock.json +2 -2
- nautobot/ui/package.json +1 -1
- nautobot/users/admin.py +44 -0
- nautobot/users/migrations/0007_alter_objectpermission_object_types.py +33 -0
- nautobot/users/models.py +3 -2
- nautobot/virtualization/navigation.py +1 -33
- nautobot/virtualization/tests/test_api.py +1 -1
- nautobot/virtualization/tests/test_filters.py +1 -1
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/METADATA +1 -1
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/RECORD +376 -351
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/WHEEL +0 -0
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/entry_points.txt +0 -0
|
@@ -2659,6 +2659,20 @@
|
|
|
2659
2659
|
|
|
2660
2660
|
|
|
2661
2661
|
|
|
2662
|
+
<li class="md-nav__item">
|
|
2663
|
+
<a href="../../../user-guide/platform-functionality/externalintegration.html" class="md-nav__link">
|
|
2664
|
+
External Integrations
|
|
2665
|
+
</a>
|
|
2666
|
+
</li>
|
|
2667
|
+
|
|
2668
|
+
|
|
2669
|
+
|
|
2670
|
+
|
|
2671
|
+
|
|
2672
|
+
|
|
2673
|
+
|
|
2674
|
+
|
|
2675
|
+
|
|
2662
2676
|
<li class="md-nav__item">
|
|
2663
2677
|
<a href="../../../user-guide/platform-functionality/gitrepository.html" class="md-nav__link">
|
|
2664
2678
|
Git Repositories
|
|
@@ -2679,7 +2693,7 @@
|
|
|
2679
2693
|
|
|
2680
2694
|
|
|
2681
2695
|
|
|
2682
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
2696
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_9" >
|
|
2683
2697
|
|
|
2684
2698
|
|
|
2685
2699
|
|
|
@@ -2688,14 +2702,14 @@
|
|
|
2688
2702
|
<div class="md-nav__link md-nav__link--index ">
|
|
2689
2703
|
<a href="../../../user-guide/platform-functionality/graphql.html">GraphQL</a>
|
|
2690
2704
|
|
|
2691
|
-
<label for="
|
|
2705
|
+
<label for="__nav_2_4_9">
|
|
2692
2706
|
<span class="md-nav__icon md-icon"></span>
|
|
2693
2707
|
</label>
|
|
2694
2708
|
|
|
2695
2709
|
</div>
|
|
2696
2710
|
|
|
2697
|
-
<nav class="md-nav" data-md-level="3" aria-labelledby="
|
|
2698
|
-
<label class="md-nav__title" for="
|
|
2711
|
+
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_9_label" aria-expanded="false">
|
|
2712
|
+
<label class="md-nav__title" for="__nav_2_4_9">
|
|
2699
2713
|
<span class="md-nav__icon md-icon"></span>
|
|
2700
2714
|
GraphQL
|
|
2701
2715
|
</label>
|
|
@@ -2747,7 +2761,7 @@
|
|
|
2747
2761
|
|
|
2748
2762
|
|
|
2749
2763
|
|
|
2750
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
2764
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_11" >
|
|
2751
2765
|
|
|
2752
2766
|
|
|
2753
2767
|
|
|
@@ -2756,14 +2770,14 @@
|
|
|
2756
2770
|
<div class="md-nav__link md-nav__link--index ">
|
|
2757
2771
|
<a href="../../../user-guide/platform-functionality/jobs/index.html">Jobs</a>
|
|
2758
2772
|
|
|
2759
|
-
<label for="
|
|
2773
|
+
<label for="__nav_2_4_11">
|
|
2760
2774
|
<span class="md-nav__icon md-icon"></span>
|
|
2761
2775
|
</label>
|
|
2762
2776
|
|
|
2763
2777
|
</div>
|
|
2764
2778
|
|
|
2765
|
-
<nav class="md-nav" data-md-level="3" aria-labelledby="
|
|
2766
|
-
<label class="md-nav__title" for="
|
|
2779
|
+
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_11_label" aria-expanded="false">
|
|
2780
|
+
<label class="md-nav__title" for="__nav_2_4_11">
|
|
2767
2781
|
<span class="md-nav__icon md-icon"></span>
|
|
2768
2782
|
Jobs
|
|
2769
2783
|
</label>
|
|
@@ -2885,7 +2899,7 @@
|
|
|
2885
2899
|
|
|
2886
2900
|
|
|
2887
2901
|
|
|
2888
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
2902
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_15" >
|
|
2889
2903
|
|
|
2890
2904
|
|
|
2891
2905
|
|
|
@@ -2894,14 +2908,14 @@
|
|
|
2894
2908
|
<div class="md-nav__link md-nav__link--index ">
|
|
2895
2909
|
<a href="../../../user-guide/platform-functionality/rest-api/overview.html">REST API</a>
|
|
2896
2910
|
|
|
2897
|
-
<label for="
|
|
2911
|
+
<label for="__nav_2_4_15">
|
|
2898
2912
|
<span class="md-nav__icon md-icon"></span>
|
|
2899
2913
|
</label>
|
|
2900
2914
|
|
|
2901
2915
|
</div>
|
|
2902
2916
|
|
|
2903
|
-
<nav class="md-nav" data-md-level="3" aria-labelledby="
|
|
2904
|
-
<label class="md-nav__title" for="
|
|
2917
|
+
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_15_label" aria-expanded="false">
|
|
2918
|
+
<label class="md-nav__title" for="__nav_2_4_15">
|
|
2905
2919
|
<span class="md-nav__icon md-icon"></span>
|
|
2906
2920
|
REST API
|
|
2907
2921
|
</label>
|
|
@@ -3037,17 +3051,17 @@
|
|
|
3037
3051
|
|
|
3038
3052
|
|
|
3039
3053
|
|
|
3040
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
3054
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_21" >
|
|
3041
3055
|
|
|
3042
3056
|
|
|
3043
3057
|
|
|
3044
|
-
<label class="md-nav__link" for="
|
|
3058
|
+
<label class="md-nav__link" for="__nav_2_4_21" id="__nav_2_4_21_label" tabindex="0">
|
|
3045
3059
|
Users
|
|
3046
3060
|
<span class="md-nav__icon md-icon"></span>
|
|
3047
3061
|
</label>
|
|
3048
3062
|
|
|
3049
|
-
<nav class="md-nav" data-md-level="3" aria-labelledby="
|
|
3050
|
-
<label class="md-nav__title" for="
|
|
3063
|
+
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_21_label" aria-expanded="false">
|
|
3064
|
+
<label class="md-nav__title" for="__nav_2_4_21">
|
|
3051
3065
|
<span class="md-nav__icon md-icon"></span>
|
|
3052
3066
|
Users
|
|
3053
3067
|
</label>
|
|
@@ -4584,6 +4598,13 @@
|
|
|
4584
4598
|
formfield()
|
|
4585
4599
|
</a>
|
|
4586
4600
|
|
|
4601
|
+
</li>
|
|
4602
|
+
|
|
4603
|
+
<li class="md-nav__item">
|
|
4604
|
+
<a href="#nautobot.core.models.fields.ForeignKeyLimitedByContentTypes.get_limit_choices_to" class="md-nav__link">
|
|
4605
|
+
get_limit_choices_to()
|
|
4606
|
+
</a>
|
|
4607
|
+
|
|
4587
4608
|
</li>
|
|
4588
4609
|
|
|
4589
4610
|
</ul>
|
|
@@ -5745,6 +5766,20 @@
|
|
|
5745
5766
|
|
|
5746
5767
|
|
|
5747
5768
|
|
|
5769
|
+
<li class="md-nav__item">
|
|
5770
|
+
<a href="../../../release-notes/version-2.1.html" class="md-nav__link">
|
|
5771
|
+
Version 2.1
|
|
5772
|
+
</a>
|
|
5773
|
+
</li>
|
|
5774
|
+
|
|
5775
|
+
|
|
5776
|
+
|
|
5777
|
+
|
|
5778
|
+
|
|
5779
|
+
|
|
5780
|
+
|
|
5781
|
+
|
|
5782
|
+
|
|
5748
5783
|
<li class="md-nav__item">
|
|
5749
5784
|
<a href="../../../release-notes/version-2.0.html" class="md-nav__link">
|
|
5750
5785
|
Version 2.0
|
|
@@ -6551,6 +6586,13 @@
|
|
|
6551
6586
|
formfield()
|
|
6552
6587
|
</a>
|
|
6553
6588
|
|
|
6589
|
+
</li>
|
|
6590
|
+
|
|
6591
|
+
<li class="md-nav__item">
|
|
6592
|
+
<a href="#nautobot.core.models.fields.ForeignKeyLimitedByContentTypes.get_limit_choices_to" class="md-nav__link">
|
|
6593
|
+
get_limit_choices_to()
|
|
6594
|
+
</a>
|
|
6595
|
+
|
|
6554
6596
|
</li>
|
|
6555
6597
|
|
|
6556
6598
|
</ul>
|
|
@@ -7139,7 +7181,8 @@ class MyModel(models.Model):
|
|
|
7139
7181
|
|
|
7140
7182
|
<details class="quote">
|
|
7141
7183
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
7142
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7184
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
|
|
7185
|
+
<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
|
|
7143
7186
|
<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
|
|
7144
7187
|
<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
|
|
7145
7188
|
<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
|
|
@@ -7202,72 +7245,71 @@ class MyModel(models.Model):
|
|
|
7202
7245
|
<span class="normal"><a href="#__codelineno-0-144">144</a></span>
|
|
7203
7246
|
<span class="normal"><a href="#__codelineno-0-145">145</a></span>
|
|
7204
7247
|
<span class="normal"><a href="#__codelineno-0-146">146</a></span>
|
|
7205
|
-
<span class="normal"><a href="#__codelineno-0-147">147</a></span>
|
|
7206
|
-
<
|
|
7207
|
-
<a id="__codelineno-0-85" name="__codelineno-0-85"></a
|
|
7208
|
-
<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
|
|
7209
|
-
<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd">
|
|
7210
|
-
<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd">
|
|
7211
|
-
<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd">
|
|
7212
|
-
<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd">
|
|
7213
|
-
<a id="__codelineno-0-91" name="__codelineno-0-91"></a
|
|
7214
|
-
<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
|
|
7215
|
-
<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd">
|
|
7216
|
-
<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd">
|
|
7217
|
-
<a id="__codelineno-0-95" name="__codelineno-0-95"></a
|
|
7218
|
-
<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
|
|
7219
|
-
<a id="__codelineno-0-97" name="__codelineno-0-97"></a
|
|
7220
|
-
<a id="__codelineno-0-98" name="__codelineno-0-98"></a>
|
|
7221
|
-
<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd">
|
|
7222
|
-
<a id="__codelineno-0-100" name="__codelineno-0-100"></a
|
|
7223
|
-
<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
|
|
7224
|
-
<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd">
|
|
7225
|
-
<a id="__codelineno-0-103" name="__codelineno-0-103"></a
|
|
7226
|
-
<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
|
|
7227
|
-
<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd">
|
|
7228
|
-
<a id="__codelineno-0-106" name="__codelineno-0-106"></a
|
|
7229
|
-
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
|
|
7230
|
-
<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd">
|
|
7231
|
-
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd">
|
|
7232
|
-
<a id="__codelineno-0-110" name="__codelineno-0-110"></a
|
|
7233
|
-
<a id="__codelineno-0-111" name="__codelineno-0-111"></a>
|
|
7234
|
-
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd">
|
|
7235
|
-
<a id="__codelineno-0-113" name="__codelineno-0-113"></a
|
|
7236
|
-
<a id="__codelineno-0-114" name="__codelineno-0-114"></a>
|
|
7237
|
-
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> ``slugify_function``
|
|
7238
|
-
<a id="__codelineno-0-116" name="__codelineno-0-116"></a
|
|
7239
|
-
<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
|
|
7240
|
-
<a id="__codelineno-0-118" name="__codelineno-0-118"></a
|
|
7241
|
-
<a id="__codelineno-0-119" name="__codelineno-0-119"></a>
|
|
7242
|
-
<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd">
|
|
7243
|
-
<a id="__codelineno-0-121" name="__codelineno-0-121"></a
|
|
7244
|
-
<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
|
|
7245
|
-
<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> from
|
|
7246
|
-
<a id="__codelineno-0-124" name="__codelineno-0-124"></a
|
|
7247
|
-
<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
|
|
7248
|
-
<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd">
|
|
7249
|
-
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd">
|
|
7250
|
-
<a id="__codelineno-0-128" name="__codelineno-0-128"></a
|
|
7251
|
-
<a id="__codelineno-0-129" name="__codelineno-0-129"></a>
|
|
7252
|
-
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd">
|
|
7253
|
-
<a id="__codelineno-0-131" name="__codelineno-0-131"></a
|
|
7254
|
-
<a id="__codelineno-0-132" name="__codelineno-0-132"></a>
|
|
7255
|
-
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd">
|
|
7256
|
-
<a id="__codelineno-0-134" name="__codelineno-0-134"></a
|
|
7257
|
-
<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
|
|
7258
|
-
<a id="__codelineno-0-136" name="__codelineno-0-136"></a>
|
|
7259
|
-
<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"
|
|
7260
|
-
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"
|
|
7261
|
-
<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"
|
|
7262
|
-
<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="
|
|
7263
|
-
<a id="__codelineno-0-141" name="__codelineno-0-141"></a>
|
|
7264
|
-
<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
|
|
7265
|
-
<a id="__codelineno-0-143" name="__codelineno-0-143"></a
|
|
7266
|
-
<a id="__codelineno-0-144" name="__codelineno-0-144"></a
|
|
7267
|
-
<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
|
|
7268
|
-
<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
|
|
7269
|
-
<a id="__codelineno-0-147" name="__codelineno-0-147"></a>
|
|
7270
|
-
<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
7248
|
+
<span class="normal"><a href="#__codelineno-0-147">147</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="k">class</span> <span class="nc">AutoSlugField</span><span class="p">(</span><span class="n">_AutoSlugField</span><span class="p">):</span>
|
|
7249
|
+
<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="w"> </span><span class="sd">"""AutoSlugField</span>
|
|
7250
|
+
<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
|
|
7251
|
+
<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> By default, sets editable=True, blank=True, max_length=100, overwrite_on_add=False, unique=True</span>
|
|
7252
|
+
<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Required arguments:</span>
|
|
7253
|
+
<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> populate_from</span>
|
|
7254
|
+
<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Specifies which field, list of fields, or model method</span>
|
|
7255
|
+
<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> the slug will be populated from.</span>
|
|
7256
|
+
<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
|
|
7257
|
+
<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> populate_from can traverse a ForeignKey relationship</span>
|
|
7258
|
+
<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> by using Django ORM syntax:</span>
|
|
7259
|
+
<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> populate_from = 'related_model__field'</span>
|
|
7260
|
+
<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
|
|
7261
|
+
<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Optional arguments:</span>
|
|
7262
|
+
<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
|
|
7263
|
+
<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> separator</span>
|
|
7264
|
+
<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> Defines the used separator (default: '-')</span>
|
|
7265
|
+
<a id="__codelineno-0-100" name="__codelineno-0-100"></a>
|
|
7266
|
+
<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> overwrite</span>
|
|
7267
|
+
<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> If set to True, overwrites the slug on every save (default: False)</span>
|
|
7268
|
+
<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
|
|
7269
|
+
<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> overwrite_on_add</span>
|
|
7270
|
+
<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> If set to True, overwrites the provided slug on initial creation (default: False)</span>
|
|
7271
|
+
<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
|
|
7272
|
+
<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> slugify_function</span>
|
|
7273
|
+
<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Defines the function which will be used to "slugify" a content</span>
|
|
7274
|
+
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> (default: :py:func:`~django.template.defaultfilters.slugify` )</span>
|
|
7275
|
+
<a id="__codelineno-0-110" name="__codelineno-0-110"></a>
|
|
7276
|
+
<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> It is possible to provide custom "slugify" function with</span>
|
|
7277
|
+
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> the ``slugify_function`` function in a model class.</span>
|
|
7278
|
+
<a id="__codelineno-0-113" name="__codelineno-0-113"></a>
|
|
7279
|
+
<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> ``slugify_function`` function in a model class takes priority over</span>
|
|
7280
|
+
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> ``slugify_function`` given as an argument to :py:class:`~AutoSlugField`.</span>
|
|
7281
|
+
<a id="__codelineno-0-116" name="__codelineno-0-116"></a>
|
|
7282
|
+
<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> Example</span>
|
|
7283
|
+
<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
|
|
7284
|
+
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> .. code-block:: python</span>
|
|
7285
|
+
<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> # models.py</span>
|
|
7286
|
+
<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
|
|
7287
|
+
<a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="sd"> from django.db import models</span>
|
|
7288
|
+
<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> from django_extensions.db.fields import AutoSlugField</span>
|
|
7289
|
+
<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
|
|
7290
|
+
<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> class MyModel(models.Model):</span>
|
|
7291
|
+
<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd"> def slugify_function(self, content):</span>
|
|
7292
|
+
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> return content.replace('_', '-').lower()</span>
|
|
7293
|
+
<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
|
|
7294
|
+
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> title = models.CharField(max_length=42)</span>
|
|
7295
|
+
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> slug = AutoSlugField(populate_from='title')</span>
|
|
7296
|
+
<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
|
|
7297
|
+
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Taken from django_extensions AutoSlugField Documentation.</span>
|
|
7298
|
+
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> """</span>
|
|
7299
|
+
<a id="__codelineno-0-134" name="__codelineno-0-134"></a>
|
|
7300
|
+
<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
7301
|
+
<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"max_length"</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
7302
|
+
<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"editable"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
|
7303
|
+
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"overwrite_on_add"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
|
7304
|
+
<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"unique"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
|
7305
|
+
<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
7306
|
+
<a id="__codelineno-0-141" name="__codelineno-0-141"></a>
|
|
7307
|
+
<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">def</span> <span class="nf">get_slug_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">,</span> <span class="n">lookup_value</span><span class="p">):</span>
|
|
7308
|
+
<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="w"> </span><span class="sd">"""Workaround for https://github.com/django-extensions/django-extensions/issues/1713."""</span>
|
|
7309
|
+
<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="k">try</span><span class="p">:</span>
|
|
7310
|
+
<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_slug_fields</span><span class="p">(</span><span class="n">model_instance</span><span class="p">,</span> <span class="n">lookup_value</span><span class="p">)</span>
|
|
7311
|
+
<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
7312
|
+
<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
7271
7313
|
</code></pre></div></td></tr></table></div>
|
|
7272
7314
|
</details>
|
|
7273
7315
|
|
|
@@ -7300,17 +7342,17 @@ class MyModel(models.Model):
|
|
|
7300
7342
|
|
|
7301
7343
|
<details class="quote">
|
|
7302
7344
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
7303
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7345
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-142">142</a></span>
|
|
7346
|
+
<span class="normal"><a href="#__codelineno-0-143">143</a></span>
|
|
7304
7347
|
<span class="normal"><a href="#__codelineno-0-144">144</a></span>
|
|
7305
7348
|
<span class="normal"><a href="#__codelineno-0-145">145</a></span>
|
|
7306
7349
|
<span class="normal"><a href="#__codelineno-0-146">146</a></span>
|
|
7307
|
-
<span class="normal"><a href="#__codelineno-0-147">147</a></span>
|
|
7308
|
-
<
|
|
7309
|
-
<a id="__codelineno-0-144" name="__codelineno-0-144"></a
|
|
7310
|
-
<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
|
|
7311
|
-
<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
|
|
7312
|
-
<a id="__codelineno-0-147" name="__codelineno-0-147"></a>
|
|
7313
|
-
<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
7350
|
+
<span class="normal"><a href="#__codelineno-0-147">147</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="k">def</span> <span class="nf">get_slug_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">,</span> <span class="n">lookup_value</span><span class="p">):</span>
|
|
7351
|
+
<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="w"> </span><span class="sd">"""Workaround for https://github.com/django-extensions/django-extensions/issues/1713."""</span>
|
|
7352
|
+
<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="k">try</span><span class="p">:</span>
|
|
7353
|
+
<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_slug_fields</span><span class="p">(</span><span class="n">model_instance</span><span class="p">,</span> <span class="n">lookup_value</span><span class="p">)</span>
|
|
7354
|
+
<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
7355
|
+
<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
7314
7356
|
</code></pre></div></td></tr></table></div>
|
|
7315
7357
|
</details>
|
|
7316
7358
|
</div>
|
|
@@ -9256,10 +9298,7 @@ ConfigContexts.</p>
|
|
|
9256
9298
|
|
|
9257
9299
|
<details class="quote">
|
|
9258
9300
|
<summary>Source code in <code>nautobot/extras/models/models.py</code></summary>
|
|
9259
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9260
|
-
<span class="normal"><a href="#__codelineno-0-149">149</a></span>
|
|
9261
|
-
<span class="normal"><a href="#__codelineno-0-150">150</a></span>
|
|
9262
|
-
<span class="normal"><a href="#__codelineno-0-151">151</a></span>
|
|
9301
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-151">151</a></span>
|
|
9263
9302
|
<span class="normal"><a href="#__codelineno-0-152">152</a></span>
|
|
9264
9303
|
<span class="normal"><a href="#__codelineno-0-153">153</a></span>
|
|
9265
9304
|
<span class="normal"><a href="#__codelineno-0-154">154</a></span>
|
|
@@ -9356,107 +9395,110 @@ ConfigContexts.</p>
|
|
|
9356
9395
|
<span class="normal"><a href="#__codelineno-0-245">245</a></span>
|
|
9357
9396
|
<span class="normal"><a href="#__codelineno-0-246">246</a></span>
|
|
9358
9397
|
<span class="normal"><a href="#__codelineno-0-247">247</a></span>
|
|
9359
|
-
<span class="normal"><a href="#__codelineno-0-248">248</a></span
|
|
9360
|
-
<
|
|
9361
|
-
<
|
|
9362
|
-
<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="
|
|
9363
|
-
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="
|
|
9364
|
-
<a id="__codelineno-0-153" name="__codelineno-0-153"></a>
|
|
9365
|
-
<a id="__codelineno-0-154" name="__codelineno-0-154"></a
|
|
9366
|
-
<a id="__codelineno-0-155" name="__codelineno-0-155"></a
|
|
9367
|
-
<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
|
|
9368
|
-
<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
|
|
9369
|
-
<a id="__codelineno-0-158" name="__codelineno-0-158"></a>
|
|
9370
|
-
<a id="__codelineno-0-159" name="__codelineno-0-159"></a>
|
|
9371
|
-
<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">
|
|
9372
|
-
<a id="__codelineno-0-161" name="__codelineno-0-161"></a>
|
|
9373
|
-
<a id="__codelineno-0-162" name="__codelineno-0-162"></a>
|
|
9374
|
-
<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">
|
|
9375
|
-
<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="n">
|
|
9376
|
-
<a id="__codelineno-0-165" name="__codelineno-0-165"></a>
|
|
9377
|
-
<a id="__codelineno-0-166" name="__codelineno-0-166"></a>
|
|
9378
|
-
<a id="__codelineno-0-167" name="__codelineno-0-167"></a>
|
|
9379
|
-
<a id="__codelineno-0-168" name="__codelineno-0-168"></a>
|
|
9380
|
-
<a id="__codelineno-0-169" name="__codelineno-0-169"></a>
|
|
9381
|
-
<a id="__codelineno-0-170" name="__codelineno-0-170"></a>
|
|
9382
|
-
<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">
|
|
9383
|
-
<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">
|
|
9384
|
-
<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">
|
|
9385
|
-
<a id="__codelineno-0-174" name="__codelineno-0-174"></a>
|
|
9386
|
-
<a id="__codelineno-0-175" name="__codelineno-0-175"></a>
|
|
9387
|
-
<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
|
|
9388
|
-
<a id="__codelineno-0-177" name="__codelineno-0-177"></a>
|
|
9389
|
-
<a id="__codelineno-0-178" name="__codelineno-0-178"></a>
|
|
9390
|
-
<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="p">
|
|
9391
|
-
<a id="__codelineno-0-180" name="__codelineno-0-180"></a>
|
|
9392
|
-
<a id="__codelineno-0-181" name="__codelineno-0-181"></a>
|
|
9393
|
-
<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
|
|
9394
|
-
<a id="__codelineno-0-183" name="__codelineno-0-183"></a>
|
|
9395
|
-
<a id="__codelineno-0-184" name="__codelineno-0-184"></a>
|
|
9396
|
-
<a id="__codelineno-0-185" name="__codelineno-0-185"></a>
|
|
9397
|
-
<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
|
|
9398
|
-
<a id="__codelineno-0-187" name="__codelineno-0-187"></a>
|
|
9399
|
-
<a id="__codelineno-0-188" name="__codelineno-0-188"></a>
|
|
9400
|
-
<a id="__codelineno-0-189" name="__codelineno-0-189"></a>
|
|
9401
|
-
<a id="__codelineno-0-190" name="__codelineno-0-190"></a
|
|
9402
|
-
<a id="__codelineno-0-191" name="__codelineno-0-191"></a
|
|
9403
|
-
<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="
|
|
9404
|
-
<a id="__codelineno-0-193" name="__codelineno-0-193"></a>
|
|
9405
|
-
<a id="__codelineno-0-194" name="__codelineno-0-194"></a
|
|
9406
|
-
<a id="__codelineno-0-195" name="__codelineno-0-195"></a
|
|
9407
|
-
<a id="__codelineno-0-196" name="__codelineno-0-196"></a>
|
|
9408
|
-
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">
|
|
9409
|
-
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="
|
|
9410
|
-
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="
|
|
9411
|
-
<a id="__codelineno-0-200" name="__codelineno-0-200"></a>
|
|
9412
|
-
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="
|
|
9413
|
-
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="c1">#
|
|
9414
|
-
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="c1">#
|
|
9415
|
-
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="
|
|
9416
|
-
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="
|
|
9417
|
-
<a id="__codelineno-0-206" name="__codelineno-0-206"></a>
|
|
9418
|
-
<a id="__codelineno-0-207" name="__codelineno-0-207"></a>
|
|
9419
|
-
<a id="__codelineno-0-208" name="__codelineno-0-208"></a>
|
|
9420
|
-
<a id="__codelineno-0-209" name="__codelineno-0-209"></a>
|
|
9421
|
-
<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
|
|
9422
|
-
<a id="__codelineno-0-211" name="__codelineno-0-211"></a>
|
|
9423
|
-
<a id="__codelineno-0-212" name="__codelineno-0-212"></a>
|
|
9424
|
-
<a id="__codelineno-0-213" name="__codelineno-0-213"></a>
|
|
9425
|
-
<a id="__codelineno-0-214" name="__codelineno-0-214"></a>
|
|
9426
|
-
<a id="__codelineno-0-215" name="__codelineno-0-215"></a>
|
|
9427
|
-
<a id="__codelineno-0-216" name="__codelineno-0-216"></a>
|
|
9428
|
-
<a id="__codelineno-0-217" name="__codelineno-0-217"></a>
|
|
9429
|
-
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="
|
|
9430
|
-
<a id="__codelineno-0-219" name="__codelineno-0-219"></a>
|
|
9431
|
-
<a id="__codelineno-0-220" name="__codelineno-0-220"></a>
|
|
9432
|
-
<a id="__codelineno-0-221" name="__codelineno-0-221"></a>
|
|
9433
|
-
<a id="__codelineno-0-222" name="__codelineno-0-222"></a>
|
|
9434
|
-
<a id="__codelineno-0-223" name="__codelineno-0-223"></a>
|
|
9435
|
-
<a id="__codelineno-0-224" name="__codelineno-0-224"></a>
|
|
9436
|
-
<a id="__codelineno-0-225" name="__codelineno-0-225"></a>
|
|
9437
|
-
<a id="__codelineno-0-226" name="__codelineno-0-226"></a>
|
|
9438
|
-
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="
|
|
9439
|
-
<a id="__codelineno-0-228" name="__codelineno-0-228"></a>
|
|
9440
|
-
<a id="__codelineno-0-229" name="__codelineno-0-229"></a>
|
|
9441
|
-
<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
|
|
9442
|
-
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">
|
|
9443
|
-
<a id="__codelineno-0-232" name="__codelineno-0-232"></a>
|
|
9444
|
-
<a id="__codelineno-0-233" name="__codelineno-0-233"></a>
|
|
9445
|
-
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="
|
|
9398
|
+
<span class="normal"><a href="#__codelineno-0-248">248</a></span>
|
|
9399
|
+
<span class="normal"><a href="#__codelineno-0-249">249</a></span>
|
|
9400
|
+
<span class="normal"><a href="#__codelineno-0-250">250</a></span>
|
|
9401
|
+
<span class="normal"><a href="#__codelineno-0-251">251</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="k">class</span> <span class="nc">ConfigContextModel</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">,</span> <span class="n">ConfigContextSchemaValidationMixin</span><span class="p">):</span>
|
|
9402
|
+
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9403
|
+
<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> A model which includes local configuration context data. This local data will override any inherited data from</span>
|
|
9404
|
+
<a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="sd"> ConfigContexts.</span>
|
|
9405
|
+
<a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> """</span>
|
|
9406
|
+
<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
|
|
9407
|
+
<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">local_config_context_data</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">JSONField</span><span class="p">(</span>
|
|
9408
|
+
<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">encoder</span><span class="o">=</span><span class="n">DjangoJSONEncoder</span><span class="p">,</span>
|
|
9409
|
+
<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
9410
|
+
<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
9411
|
+
<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="p">)</span>
|
|
9412
|
+
<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">local_config_context_schema</span> <span class="o">=</span> <span class="n">ForeignKeyWithAutoRelatedName</span><span class="p">(</span>
|
|
9413
|
+
<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">to</span><span class="o">=</span><span class="s2">"extras.ConfigContextSchema"</span><span class="p">,</span>
|
|
9414
|
+
<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">SET_NULL</span><span class="p">,</span>
|
|
9415
|
+
<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
9416
|
+
<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
9417
|
+
<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="n">help_text</span><span class="o">=</span><span class="s2">"Optional schema to validate the structure of the data"</span><span class="p">,</span>
|
|
9418
|
+
<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="p">)</span>
|
|
9419
|
+
<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="c1"># The local context data *may* be owned by another model, such as a GitRepository, or it may be un-owned</span>
|
|
9420
|
+
<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="n">local_config_context_data_owner_content_type</span> <span class="o">=</span> <span class="n">ForeignKeyWithAutoRelatedName</span><span class="p">(</span>
|
|
9421
|
+
<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">to</span><span class="o">=</span><span class="n">ContentType</span><span class="p">,</span>
|
|
9422
|
+
<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
|
|
9423
|
+
<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">limit_choices_to</span><span class="o">=</span><span class="n">FeatureQuery</span><span class="p">(</span><span class="s2">"config_context_owners"</span><span class="p">),</span>
|
|
9424
|
+
<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
9425
|
+
<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
9426
|
+
<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
9427
|
+
<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="p">)</span>
|
|
9428
|
+
<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="n">local_config_context_data_owner_object_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">UUIDField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9429
|
+
<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="n">local_config_context_data_owner</span> <span class="o">=</span> <span class="n">GenericForeignKey</span><span class="p">(</span>
|
|
9430
|
+
<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">ct_field</span><span class="o">=</span><span class="s2">"local_config_context_data_owner_content_type"</span><span class="p">,</span>
|
|
9431
|
+
<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="n">fk_field</span><span class="o">=</span><span class="s2">"local_config_context_data_owner_object_id"</span><span class="p">,</span>
|
|
9432
|
+
<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="p">)</span>
|
|
9433
|
+
<a id="__codelineno-0-183" name="__codelineno-0-183"></a>
|
|
9434
|
+
<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
|
|
9435
|
+
<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="n">abstract</span> <span class="o">=</span> <span class="kc">True</span>
|
|
9436
|
+
<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[</span>
|
|
9437
|
+
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="n">models</span><span class="o">.</span><span class="n">Index</span><span class="p">(</span>
|
|
9438
|
+
<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s2">"local_config_context_data_owner_content_type"</span><span class="p">,</span> <span class="s2">"local_config_context_data_owner_object_id"</span><span class="p">)</span>
|
|
9439
|
+
<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="p">),</span>
|
|
9440
|
+
<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="p">]</span>
|
|
9441
|
+
<a id="__codelineno-0-191" name="__codelineno-0-191"></a>
|
|
9442
|
+
<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="k">def</span> <span class="nf">get_config_context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
9443
|
+
<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9444
|
+
<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> Return the rendered configuration context for a device or VM.</span>
|
|
9445
|
+
<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> """</span>
|
|
9446
|
+
<a id="__codelineno-0-196" name="__codelineno-0-196"></a>
|
|
9447
|
+
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"config_context_data"</span><span class="p">):</span>
|
|
9448
|
+
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="c1"># Annotation not available, so fall back to manually querying for the config context</span>
|
|
9449
|
+
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">config_context_data</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_object</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9450
|
+
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">else</span><span class="p">:</span>
|
|
9451
|
+
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="n">config_context_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config_context_data</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
9452
|
+
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="c1"># Device and VirtualMachine's Location has its own ConfigContext and its parent Locations' ConfigContext, if any, should</span>
|
|
9453
|
+
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="c1"># also be applied. However, since moving from mptt to django-tree-queries https://github.com/nautobot/nautobot/issues/510,</span>
|
|
9454
|
+
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="c1"># we lost the ability to query the ancestors for a particular tree node for subquery https://github.com/matthiask/django-tree-queries/issues/54.</span>
|
|
9455
|
+
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="c1"># So instead of constructing the location related query in ConfigContextModelQueryset._get_config_context_filters(), which is complicated across databases</span>
|
|
9456
|
+
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="c1"># We append the missing parent location query here as a patch.</span>
|
|
9457
|
+
<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">location_config_context_queryset</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
|
9458
|
+
<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model_name</span> <span class="o">==</span> <span class="s2">"device"</span><span class="p">:</span>
|
|
9459
|
+
<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="n">location_config_context_queryset</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
9460
|
+
<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">locations__in</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">ancestors</span><span class="p">(</span><span class="n">include_self</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9461
|
+
<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
|
|
9462
|
+
<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">else</span><span class="p">:</span>
|
|
9463
|
+
<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cluster</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">cluster</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
|
9464
|
+
<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="n">location_config_context_queryset</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
9465
|
+
<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="n">locations__in</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">cluster</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">ancestors</span><span class="p">(</span><span class="n">include_self</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9466
|
+
<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
|
|
9467
|
+
<a id="__codelineno-0-217" name="__codelineno-0-217"></a>
|
|
9468
|
+
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="c1"># Annotation has keys "weight" and "name" (used for ordering) and "data" (the actual config context data)</span>
|
|
9469
|
+
<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="k">for</span> <span class="n">cc</span> <span class="ow">in</span> <span class="n">location_config_context_queryset</span><span class="p">:</span>
|
|
9470
|
+
<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="n">config_context_data</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"data"</span><span class="p">:</span> <span class="n">cc</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">:</span> <span class="n">cc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">"weight"</span><span class="p">:</span> <span class="n">cc</span><span class="o">.</span><span class="n">weight</span><span class="p">})</span>
|
|
9471
|
+
<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="n">config_context_data</span> <span class="o">=</span> <span class="p">[</span>
|
|
9472
|
+
<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="n">c</span><span class="p">[</span><span class="s2">"data"</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">config_context_data</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="p">(</span><span class="n">k</span><span class="p">[</span><span class="s2">"weight"</span><span class="p">],</span> <span class="n">k</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]))</span>
|
|
9473
|
+
<a id="__codelineno-0-223" name="__codelineno-0-223"></a> <span class="p">]</span>
|
|
9474
|
+
<a id="__codelineno-0-224" name="__codelineno-0-224"></a>
|
|
9475
|
+
<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="c1"># Compile all config data, overwriting lower-weight values with higher-weight values where a collision occurs</span>
|
|
9476
|
+
<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span>
|
|
9477
|
+
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">for</span> <span class="n">context</span> <span class="ow">in</span> <span class="n">config_context_data</span><span class="p">:</span>
|
|
9478
|
+
<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">deepmerge</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
|
|
9479
|
+
<a id="__codelineno-0-229" name="__codelineno-0-229"></a>
|
|
9480
|
+
<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="c1"># If the object has local config context data defined, merge it last</span>
|
|
9481
|
+
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_data</span><span class="p">:</span>
|
|
9482
|
+
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">deepmerge</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_data</span><span class="p">)</span>
|
|
9483
|
+
<a id="__codelineno-0-233" name="__codelineno-0-233"></a>
|
|
9484
|
+
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="k">return</span> <span class="n">data</span>
|
|
9446
9485
|
<a id="__codelineno-0-235" name="__codelineno-0-235"></a>
|
|
9447
|
-
<a id="__codelineno-0-236" name="__codelineno-0-236"></a>
|
|
9448
|
-
<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="
|
|
9449
|
-
<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
|
|
9450
|
-
<a id="__codelineno-0-239" name="__codelineno-0-239"></a>
|
|
9451
|
-
<a id="__codelineno-0-240" name="__codelineno-0-240"></a>
|
|
9452
|
-
<a id="__codelineno-0-241" name="__codelineno-0-241"></a>
|
|
9453
|
-
<a id="__codelineno-0-242" name="__codelineno-0-242"></a>
|
|
9454
|
-
<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="
|
|
9455
|
-
<a id="__codelineno-0-244" name="__codelineno-0-244"></a>
|
|
9456
|
-
<a id="__codelineno-0-245" name="__codelineno-0-245"></a>
|
|
9457
|
-
<a id="__codelineno-0-246" name="__codelineno-0-246"></a>
|
|
9458
|
-
<a id="__codelineno-0-247" name="__codelineno-0-247"></a>
|
|
9459
|
-
<a id="__codelineno-0-248" name="__codelineno-0-248"></a>
|
|
9486
|
+
<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
9487
|
+
<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">()</span>
|
|
9488
|
+
<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
|
|
9489
|
+
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="c1"># Verify that JSON data is provided as an object</span>
|
|
9490
|
+
<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_data</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_data</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
9491
|
+
<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span>
|
|
9492
|
+
<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="p">{</span><span class="s2">"local_config_context_data"</span><span class="p">:</span> <span class="s1">'JSON data must be in object form. Example: {"foo": 123}'</span><span class="p">}</span>
|
|
9493
|
+
<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="p">)</span>
|
|
9494
|
+
<a id="__codelineno-0-244" name="__codelineno-0-244"></a>
|
|
9495
|
+
<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_schema</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_data</span><span class="p">:</span>
|
|
9496
|
+
<a id="__codelineno-0-246" name="__codelineno-0-246"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span>
|
|
9497
|
+
<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="p">{</span><span class="s2">"local_config_context_schema"</span><span class="p">:</span> <span class="s2">"Local config context data must exist for a schema to be applied."</span><span class="p">}</span>
|
|
9498
|
+
<a id="__codelineno-0-248" name="__codelineno-0-248"></a> <span class="p">)</span>
|
|
9499
|
+
<a id="__codelineno-0-249" name="__codelineno-0-249"></a>
|
|
9500
|
+
<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="c1"># Validate data against schema</span>
|
|
9501
|
+
<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_with_schema</span><span class="p">(</span><span class="s2">"local_config_context_data"</span><span class="p">,</span> <span class="s2">"local_config_context_schema"</span><span class="p">)</span>
|
|
9460
9502
|
</code></pre></div></td></tr></table></div>
|
|
9461
9503
|
</details>
|
|
9462
9504
|
|
|
@@ -9489,10 +9531,7 @@ ConfigContexts.</p>
|
|
|
9489
9531
|
|
|
9490
9532
|
<details class="quote">
|
|
9491
9533
|
<summary>Source code in <code>nautobot/extras/models/models.py</code></summary>
|
|
9492
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9493
|
-
<span class="normal"><a href="#__codelineno-0-190">190</a></span>
|
|
9494
|
-
<span class="normal"><a href="#__codelineno-0-191">191</a></span>
|
|
9495
|
-
<span class="normal"><a href="#__codelineno-0-192">192</a></span>
|
|
9534
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-192">192</a></span>
|
|
9496
9535
|
<span class="normal"><a href="#__codelineno-0-193">193</a></span>
|
|
9497
9536
|
<span class="normal"><a href="#__codelineno-0-194">194</a></span>
|
|
9498
9537
|
<span class="normal"><a href="#__codelineno-0-195">195</a></span>
|
|
@@ -9531,49 +9570,52 @@ ConfigContexts.</p>
|
|
|
9531
9570
|
<span class="normal"><a href="#__codelineno-0-228">228</a></span>
|
|
9532
9571
|
<span class="normal"><a href="#__codelineno-0-229">229</a></span>
|
|
9533
9572
|
<span class="normal"><a href="#__codelineno-0-230">230</a></span>
|
|
9534
|
-
<span class="normal"><a href="#__codelineno-0-231">231</a></span
|
|
9535
|
-
<
|
|
9536
|
-
<
|
|
9537
|
-
<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="
|
|
9538
|
-
<a id="__codelineno-0-193" name="__codelineno-0-193"></a>
|
|
9539
|
-
<a id="__codelineno-0-194" name="__codelineno-0-194"></a
|
|
9540
|
-
<a id="__codelineno-0-195" name="__codelineno-0-195"></a
|
|
9541
|
-
<a id="__codelineno-0-196" name="__codelineno-0-196"></a>
|
|
9542
|
-
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">
|
|
9543
|
-
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="
|
|
9544
|
-
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="
|
|
9545
|
-
<a id="__codelineno-0-200" name="__codelineno-0-200"></a>
|
|
9546
|
-
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="
|
|
9547
|
-
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="c1">#
|
|
9548
|
-
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="c1">#
|
|
9549
|
-
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="
|
|
9550
|
-
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="
|
|
9551
|
-
<a id="__codelineno-0-206" name="__codelineno-0-206"></a>
|
|
9552
|
-
<a id="__codelineno-0-207" name="__codelineno-0-207"></a>
|
|
9553
|
-
<a id="__codelineno-0-208" name="__codelineno-0-208"></a>
|
|
9554
|
-
<a id="__codelineno-0-209" name="__codelineno-0-209"></a>
|
|
9555
|
-
<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
|
|
9556
|
-
<a id="__codelineno-0-211" name="__codelineno-0-211"></a>
|
|
9557
|
-
<a id="__codelineno-0-212" name="__codelineno-0-212"></a>
|
|
9558
|
-
<a id="__codelineno-0-213" name="__codelineno-0-213"></a>
|
|
9559
|
-
<a id="__codelineno-0-214" name="__codelineno-0-214"></a>
|
|
9560
|
-
<a id="__codelineno-0-215" name="__codelineno-0-215"></a>
|
|
9561
|
-
<a id="__codelineno-0-216" name="__codelineno-0-216"></a>
|
|
9562
|
-
<a id="__codelineno-0-217" name="__codelineno-0-217"></a>
|
|
9563
|
-
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="
|
|
9564
|
-
<a id="__codelineno-0-219" name="__codelineno-0-219"></a>
|
|
9565
|
-
<a id="__codelineno-0-220" name="__codelineno-0-220"></a>
|
|
9566
|
-
<a id="__codelineno-0-221" name="__codelineno-0-221"></a>
|
|
9567
|
-
<a id="__codelineno-0-222" name="__codelineno-0-222"></a>
|
|
9568
|
-
<a id="__codelineno-0-223" name="__codelineno-0-223"></a>
|
|
9569
|
-
<a id="__codelineno-0-224" name="__codelineno-0-224"></a>
|
|
9570
|
-
<a id="__codelineno-0-225" name="__codelineno-0-225"></a>
|
|
9571
|
-
<a id="__codelineno-0-226" name="__codelineno-0-226"></a>
|
|
9572
|
-
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="
|
|
9573
|
-
<a id="__codelineno-0-228" name="__codelineno-0-228"></a>
|
|
9574
|
-
<a id="__codelineno-0-229" name="__codelineno-0-229"></a>
|
|
9575
|
-
<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
|
|
9576
|
-
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">
|
|
9573
|
+
<span class="normal"><a href="#__codelineno-0-231">231</a></span>
|
|
9574
|
+
<span class="normal"><a href="#__codelineno-0-232">232</a></span>
|
|
9575
|
+
<span class="normal"><a href="#__codelineno-0-233">233</a></span>
|
|
9576
|
+
<span class="normal"><a href="#__codelineno-0-234">234</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="k">def</span> <span class="nf">get_config_context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
9577
|
+
<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9578
|
+
<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> Return the rendered configuration context for a device or VM.</span>
|
|
9579
|
+
<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> """</span>
|
|
9580
|
+
<a id="__codelineno-0-196" name="__codelineno-0-196"></a>
|
|
9581
|
+
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"config_context_data"</span><span class="p">):</span>
|
|
9582
|
+
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="c1"># Annotation not available, so fall back to manually querying for the config context</span>
|
|
9583
|
+
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">config_context_data</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_object</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9584
|
+
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">else</span><span class="p">:</span>
|
|
9585
|
+
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="n">config_context_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config_context_data</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
9586
|
+
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="c1"># Device and VirtualMachine's Location has its own ConfigContext and its parent Locations' ConfigContext, if any, should</span>
|
|
9587
|
+
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="c1"># also be applied. However, since moving from mptt to django-tree-queries https://github.com/nautobot/nautobot/issues/510,</span>
|
|
9588
|
+
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="c1"># we lost the ability to query the ancestors for a particular tree node for subquery https://github.com/matthiask/django-tree-queries/issues/54.</span>
|
|
9589
|
+
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="c1"># So instead of constructing the location related query in ConfigContextModelQueryset._get_config_context_filters(), which is complicated across databases</span>
|
|
9590
|
+
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="c1"># We append the missing parent location query here as a patch.</span>
|
|
9591
|
+
<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">location_config_context_queryset</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
|
9592
|
+
<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model_name</span> <span class="o">==</span> <span class="s2">"device"</span><span class="p">:</span>
|
|
9593
|
+
<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="n">location_config_context_queryset</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
9594
|
+
<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">locations__in</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">ancestors</span><span class="p">(</span><span class="n">include_self</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9595
|
+
<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
|
|
9596
|
+
<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">else</span><span class="p">:</span>
|
|
9597
|
+
<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cluster</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">cluster</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
|
9598
|
+
<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="n">location_config_context_queryset</span> <span class="o">=</span> <span class="n">ConfigContext</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
9599
|
+
<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="n">locations__in</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">cluster</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">ancestors</span><span class="p">(</span><span class="n">include_self</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9600
|
+
<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
|
|
9601
|
+
<a id="__codelineno-0-217" name="__codelineno-0-217"></a>
|
|
9602
|
+
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="c1"># Annotation has keys "weight" and "name" (used for ordering) and "data" (the actual config context data)</span>
|
|
9603
|
+
<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="k">for</span> <span class="n">cc</span> <span class="ow">in</span> <span class="n">location_config_context_queryset</span><span class="p">:</span>
|
|
9604
|
+
<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="n">config_context_data</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"data"</span><span class="p">:</span> <span class="n">cc</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">:</span> <span class="n">cc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">"weight"</span><span class="p">:</span> <span class="n">cc</span><span class="o">.</span><span class="n">weight</span><span class="p">})</span>
|
|
9605
|
+
<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="n">config_context_data</span> <span class="o">=</span> <span class="p">[</span>
|
|
9606
|
+
<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="n">c</span><span class="p">[</span><span class="s2">"data"</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">config_context_data</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="p">(</span><span class="n">k</span><span class="p">[</span><span class="s2">"weight"</span><span class="p">],</span> <span class="n">k</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]))</span>
|
|
9607
|
+
<a id="__codelineno-0-223" name="__codelineno-0-223"></a> <span class="p">]</span>
|
|
9608
|
+
<a id="__codelineno-0-224" name="__codelineno-0-224"></a>
|
|
9609
|
+
<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="c1"># Compile all config data, overwriting lower-weight values with higher-weight values where a collision occurs</span>
|
|
9610
|
+
<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span>
|
|
9611
|
+
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">for</span> <span class="n">context</span> <span class="ow">in</span> <span class="n">config_context_data</span><span class="p">:</span>
|
|
9612
|
+
<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">deepmerge</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
|
|
9613
|
+
<a id="__codelineno-0-229" name="__codelineno-0-229"></a>
|
|
9614
|
+
<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="c1"># If the object has local config context data defined, merge it last</span>
|
|
9615
|
+
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_data</span><span class="p">:</span>
|
|
9616
|
+
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">deepmerge</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_config_context_data</span><span class="p">)</span>
|
|
9617
|
+
<a id="__codelineno-0-233" name="__codelineno-0-233"></a>
|
|
9618
|
+
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="k">return</span> <span class="n">data</span>
|
|
9577
9619
|
</code></pre></div></td></tr></table></div>
|
|
9578
9620
|
</details>
|
|
9579
9621
|
</div>
|
|
@@ -9606,10 +9648,7 @@ ConfigContexts.</p>
|
|
|
9606
9648
|
|
|
9607
9649
|
<details class="quote">
|
|
9608
9650
|
<summary>Source code in <code>nautobot/extras/models/models.py</code></summary>
|
|
9609
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9610
|
-
<span class="normal"><a href="#__codelineno-0-45">45</a></span>
|
|
9611
|
-
<span class="normal"><a href="#__codelineno-0-46">46</a></span>
|
|
9612
|
-
<span class="normal"><a href="#__codelineno-0-47">47</a></span>
|
|
9651
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-47">47</a></span>
|
|
9613
9652
|
<span class="normal"><a href="#__codelineno-0-48">48</a></span>
|
|
9614
9653
|
<span class="normal"><a href="#__codelineno-0-49">49</a></span>
|
|
9615
9654
|
<span class="normal"><a href="#__codelineno-0-50">50</a></span>
|
|
@@ -9620,21 +9659,24 @@ ConfigContexts.</p>
|
|
|
9620
9659
|
<span class="normal"><a href="#__codelineno-0-55">55</a></span>
|
|
9621
9660
|
<span class="normal"><a href="#__codelineno-0-56">56</a></span>
|
|
9622
9661
|
<span class="normal"><a href="#__codelineno-0-57">57</a></span>
|
|
9623
|
-
<span class="normal"><a href="#__codelineno-0-58">58</a></span
|
|
9624
|
-
<
|
|
9625
|
-
<
|
|
9626
|
-
<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="
|
|
9627
|
-
<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
|
|
9628
|
-
<a id="__codelineno-0-49" name="__codelineno-0-49"></a
|
|
9629
|
-
<a id="__codelineno-0-50" name="__codelineno-0-50"></a
|
|
9630
|
-
<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
|
|
9631
|
-
<a id="__codelineno-0-52" name="__codelineno-0-52"></a>
|
|
9632
|
-
<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="
|
|
9633
|
-
<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="
|
|
9634
|
-
<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
|
|
9635
|
-
<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
|
|
9636
|
-
<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
|
|
9637
|
-
<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
|
|
9662
|
+
<span class="normal"><a href="#__codelineno-0-58">58</a></span>
|
|
9663
|
+
<span class="normal"><a href="#__codelineno-0-59">59</a></span>
|
|
9664
|
+
<span class="normal"><a href="#__codelineno-0-60">60</a></span>
|
|
9665
|
+
<span class="normal"><a href="#__codelineno-0-61">61</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="k">class</span> <span class="nc">ConfigContextSchemaValidationMixin</span><span class="p">:</span>
|
|
9666
|
+
<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9667
|
+
<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Mixin that provides validation of config context data against a json schema.</span>
|
|
9668
|
+
<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
|
|
9669
|
+
<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
|
|
9670
|
+
<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">def</span> <span class="nf">_validate_with_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_field</span><span class="p">,</span> <span class="n">schema_field</span><span class="p">):</span>
|
|
9671
|
+
<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">schema</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_field</span><span class="p">)</span>
|
|
9672
|
+
<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">data</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_field</span><span class="p">)</span>
|
|
9673
|
+
<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
|
|
9674
|
+
<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="c1"># If schema is None, then no schema has been specified on the instance and thus no validation should occur.</span>
|
|
9675
|
+
<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
|
|
9676
|
+
<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">try</span><span class="p">:</span>
|
|
9677
|
+
<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">Draft7Validator</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">data_schema</span><span class="p">,</span> <span class="n">format_checker</span><span class="o">=</span><span class="n">Draft7Validator</span><span class="o">.</span><span class="n">FORMAT_CHECKER</span><span class="p">)</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
|
9678
|
+
<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">except</span> <span class="n">JSONSchemaValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
9679
|
+
<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">({</span><span class="n">data_field</span><span class="p">:</span> <span class="p">[</span><span class="sa">f</span><span class="s2">"Validation using the JSON Schema </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2"> failed."</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">message</span><span class="p">]})</span>
|
|
9638
9680
|
</code></pre></div></td></tr></table></div>
|
|
9639
9681
|
</details>
|
|
9640
9682
|
|
|
@@ -11486,7 +11528,8 @@ while role_1 & role_2 are both available for the Location model.</p>
|
|
|
11486
11528
|
</details>
|
|
11487
11529
|
<details class="quote">
|
|
11488
11530
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
11489
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
11531
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-173">173</a></span>
|
|
11532
|
+
<span class="normal"><a href="#__codelineno-0-174">174</a></span>
|
|
11490
11533
|
<span class="normal"><a href="#__codelineno-0-175">175</a></span>
|
|
11491
11534
|
<span class="normal"><a href="#__codelineno-0-176">176</a></span>
|
|
11492
11535
|
<span class="normal"><a href="#__codelineno-0-177">177</a></span>
|
|
@@ -11513,34 +11556,55 @@ while role_1 & role_2 are both available for the Location model.</p>
|
|
|
11513
11556
|
<span class="normal"><a href="#__codelineno-0-198">198</a></span>
|
|
11514
11557
|
<span class="normal"><a href="#__codelineno-0-199">199</a></span>
|
|
11515
11558
|
<span class="normal"><a href="#__codelineno-0-200">200</a></span>
|
|
11516
|
-
<span class="normal"><a href="#__codelineno-0-201">201</a></span
|
|
11517
|
-
<
|
|
11518
|
-
<
|
|
11519
|
-
<
|
|
11520
|
-
<
|
|
11521
|
-
<
|
|
11522
|
-
<
|
|
11523
|
-
<
|
|
11524
|
-
<
|
|
11525
|
-
<
|
|
11526
|
-
<a id="__codelineno-0-
|
|
11527
|
-
<a id="__codelineno-0-
|
|
11528
|
-
<a id="__codelineno-0-
|
|
11529
|
-
<a id="__codelineno-0-
|
|
11530
|
-
<a id="__codelineno-0-
|
|
11531
|
-
<a id="__codelineno-0-
|
|
11532
|
-
<a id="__codelineno-0-
|
|
11559
|
+
<span class="normal"><a href="#__codelineno-0-201">201</a></span>
|
|
11560
|
+
<span class="normal"><a href="#__codelineno-0-202">202</a></span>
|
|
11561
|
+
<span class="normal"><a href="#__codelineno-0-203">203</a></span>
|
|
11562
|
+
<span class="normal"><a href="#__codelineno-0-204">204</a></span>
|
|
11563
|
+
<span class="normal"><a href="#__codelineno-0-205">205</a></span>
|
|
11564
|
+
<span class="normal"><a href="#__codelineno-0-206">206</a></span>
|
|
11565
|
+
<span class="normal"><a href="#__codelineno-0-207">207</a></span>
|
|
11566
|
+
<span class="normal"><a href="#__codelineno-0-208">208</a></span>
|
|
11567
|
+
<span class="normal"><a href="#__codelineno-0-209">209</a></span>
|
|
11568
|
+
<span class="normal"><a href="#__codelineno-0-210">210</a></span>
|
|
11569
|
+
<span class="normal"><a href="#__codelineno-0-211">211</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-173" name="__codelineno-0-173"></a><span class="k">class</span> <span class="nc">ForeignKeyLimitedByContentTypes</span><span class="p">(</span><span class="n">ForeignKeyWithAutoRelatedName</span><span class="p">):</span>
|
|
11570
|
+
<a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11571
|
+
<a id="__codelineno-0-175" name="__codelineno-0-175"></a><span class="sd"> An abstract model field that automatically restricts ForeignKey options based on content_types.</span>
|
|
11572
|
+
<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
|
|
11573
|
+
<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="sd"> For instance, if the model "Role" contains two records: role_1 and role_2, role_1's content_types</span>
|
|
11574
|
+
<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="sd"> are set to "dcim.location" and "dcim.device" while the role_2's content_types are set to</span>
|
|
11575
|
+
<a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="sd"> "circuit.circuit" and "dcim.location."</span>
|
|
11576
|
+
<a id="__codelineno-0-180" name="__codelineno-0-180"></a>
|
|
11577
|
+
<a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="sd"> Then, for the field `role` on the Device model, role_1 is the only Role that is available,</span>
|
|
11578
|
+
<a id="__codelineno-0-182" name="__codelineno-0-182"></a><span class="sd"> while role_1 & role_2 are both available for the Location model.</span>
|
|
11579
|
+
<a id="__codelineno-0-183" name="__codelineno-0-183"></a>
|
|
11580
|
+
<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> The limit_choices_to for the field are automatically derived from:</span>
|
|
11581
|
+
<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> - the content-type to which the field is attached (e.g. `dcim.device`)</span>
|
|
11582
|
+
<a id="__codelineno-0-186" name="__codelineno-0-186"></a><span class="sd"> """</span>
|
|
11583
|
+
<a id="__codelineno-0-187" name="__codelineno-0-187"></a>
|
|
11584
|
+
<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">def</span> <span class="nf">get_limit_choices_to</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
11585
|
+
<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11586
|
+
<a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="sd"> Limit this field to only objects which are assigned to this model's content-type.</span>
|
|
11533
11587
|
<a id="__codelineno-0-191" name="__codelineno-0-191"></a>
|
|
11534
|
-
<a id="__codelineno-0-192" name="__codelineno-0-192"></a
|
|
11535
|
-
<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="
|
|
11536
|
-
<a id="__codelineno-0-194" name="__codelineno-0-194"></a
|
|
11537
|
-
<a id="__codelineno-0-195" name="__codelineno-0-195"></a
|
|
11538
|
-
<a id="__codelineno-0-196" name="__codelineno-0-196"></a
|
|
11539
|
-
<a id="__codelineno-0-197" name="__codelineno-0-197"></a>
|
|
11540
|
-
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="s2">"
|
|
11541
|
-
<a id="__codelineno-0-199" name="__codelineno-0-199"></a>
|
|
11542
|
-
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="
|
|
11543
|
-
<a id="__codelineno-0-201" name="__codelineno-0-201"></a>
|
|
11588
|
+
<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> Note that this is implemented via specifying `content_types__app_label=` and `content_types__model=`</span>
|
|
11589
|
+
<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="sd"> rather than via the more obvious `content_types=ContentType.objects.get_for_model(self.model)`</span>
|
|
11590
|
+
<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> because the latter approach would involve a database query, and in some cases</span>
|
|
11591
|
+
<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> (most notably FilterSet definition) this function is called **before** database migrations can be run.</span>
|
|
11592
|
+
<a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="sd"> """</span>
|
|
11593
|
+
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">return</span> <span class="p">{</span>
|
|
11594
|
+
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="s2">"content_types__app_label"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">app_label</span><span class="p">,</span>
|
|
11595
|
+
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="s2">"content_types__model"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model_name</span><span class="p">,</span>
|
|
11596
|
+
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="p">}</span>
|
|
11597
|
+
<a id="__codelineno-0-201" name="__codelineno-0-201"></a>
|
|
11598
|
+
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="k">def</span> <span class="nf">formfield</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
11599
|
+
<a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="w"> </span><span class="sd">"""Return a prepped formfield for use in model forms."""</span>
|
|
11600
|
+
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="n">defaults</span> <span class="o">=</span> <span class="p">{</span>
|
|
11601
|
+
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="s2">"form_class"</span><span class="p">:</span> <span class="n">fields</span><span class="o">.</span><span class="n">DynamicModelChoiceField</span><span class="p">,</span>
|
|
11602
|
+
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="s2">"queryset"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">related_model</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
|
11603
|
+
<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="c1"># label_lower e.g. "dcim.device"</span>
|
|
11604
|
+
<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="s2">"query_params"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"content_types"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">label_lower</span><span class="p">},</span>
|
|
11605
|
+
<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="p">}</span>
|
|
11606
|
+
<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">defaults</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
11607
|
+
<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">formfield</span><span class="p">(</span><span class="o">**</span><span class="n">defaults</span><span class="p">)</span>
|
|
11544
11608
|
</code></pre></div></td></tr></table></div>
|
|
11545
11609
|
</details>
|
|
11546
11610
|
|
|
@@ -11573,7 +11637,57 @@ while role_1 & role_2 are both available for the Location model.</p>
|
|
|
11573
11637
|
|
|
11574
11638
|
<details class="quote">
|
|
11575
11639
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
11576
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
11640
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-202">202</a></span>
|
|
11641
|
+
<span class="normal"><a href="#__codelineno-0-203">203</a></span>
|
|
11642
|
+
<span class="normal"><a href="#__codelineno-0-204">204</a></span>
|
|
11643
|
+
<span class="normal"><a href="#__codelineno-0-205">205</a></span>
|
|
11644
|
+
<span class="normal"><a href="#__codelineno-0-206">206</a></span>
|
|
11645
|
+
<span class="normal"><a href="#__codelineno-0-207">207</a></span>
|
|
11646
|
+
<span class="normal"><a href="#__codelineno-0-208">208</a></span>
|
|
11647
|
+
<span class="normal"><a href="#__codelineno-0-209">209</a></span>
|
|
11648
|
+
<span class="normal"><a href="#__codelineno-0-210">210</a></span>
|
|
11649
|
+
<span class="normal"><a href="#__codelineno-0-211">211</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="k">def</span> <span class="nf">formfield</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
11650
|
+
<a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="w"> </span><span class="sd">"""Return a prepped formfield for use in model forms."""</span>
|
|
11651
|
+
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="n">defaults</span> <span class="o">=</span> <span class="p">{</span>
|
|
11652
|
+
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="s2">"form_class"</span><span class="p">:</span> <span class="n">fields</span><span class="o">.</span><span class="n">DynamicModelChoiceField</span><span class="p">,</span>
|
|
11653
|
+
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="s2">"queryset"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">related_model</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
|
11654
|
+
<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="c1"># label_lower e.g. "dcim.device"</span>
|
|
11655
|
+
<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="s2">"query_params"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"content_types"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">label_lower</span><span class="p">},</span>
|
|
11656
|
+
<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="p">}</span>
|
|
11657
|
+
<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">defaults</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
11658
|
+
<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">formfield</span><span class="p">(</span><span class="o">**</span><span class="n">defaults</span><span class="p">)</span>
|
|
11659
|
+
</code></pre></div></td></tr></table></div>
|
|
11660
|
+
</details>
|
|
11661
|
+
</div>
|
|
11662
|
+
|
|
11663
|
+
</div>
|
|
11664
|
+
|
|
11665
|
+
|
|
11666
|
+
<div class="doc doc-object doc-function">
|
|
11667
|
+
|
|
11668
|
+
|
|
11669
|
+
|
|
11670
|
+
<h3 id="nautobot.core.models.fields.ForeignKeyLimitedByContentTypes.get_limit_choices_to" class="doc doc-heading">
|
|
11671
|
+
<code class="highlight language-python"><span class="n">get_limit_choices_to</span><span class="p">()</span></code>
|
|
11672
|
+
|
|
11673
|
+
<a href="#nautobot.core.models.fields.ForeignKeyLimitedByContentTypes.get_limit_choices_to" class="headerlink" title="Permanent link">¶</a></h3>
|
|
11674
|
+
|
|
11675
|
+
|
|
11676
|
+
<div class="doc doc-contents ">
|
|
11677
|
+
|
|
11678
|
+
<p>Limit this field to only objects which are assigned to this model's content-type.</p>
|
|
11679
|
+
<p>Note that this is implemented via specifying <code>content_types__app_label=</code> and <code>content_types__model=</code>
|
|
11680
|
+
rather than via the more obvious <code>content_types=ContentType.objects.get_for_model(self.model)</code>
|
|
11681
|
+
because the latter approach would involve a database query, and in some cases
|
|
11682
|
+
(most notably FilterSet definition) this function is called <strong>before</strong> database migrations can be run.</p>
|
|
11683
|
+
|
|
11684
|
+
<details class="quote">
|
|
11685
|
+
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
11686
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-188">188</a></span>
|
|
11687
|
+
<span class="normal"><a href="#__codelineno-0-189">189</a></span>
|
|
11688
|
+
<span class="normal"><a href="#__codelineno-0-190">190</a></span>
|
|
11689
|
+
<span class="normal"><a href="#__codelineno-0-191">191</a></span>
|
|
11690
|
+
<span class="normal"><a href="#__codelineno-0-192">192</a></span>
|
|
11577
11691
|
<span class="normal"><a href="#__codelineno-0-193">193</a></span>
|
|
11578
11692
|
<span class="normal"><a href="#__codelineno-0-194">194</a></span>
|
|
11579
11693
|
<span class="normal"><a href="#__codelineno-0-195">195</a></span>
|
|
@@ -11581,17 +11695,19 @@ while role_1 & role_2 are both available for the Location model.</p>
|
|
|
11581
11695
|
<span class="normal"><a href="#__codelineno-0-197">197</a></span>
|
|
11582
11696
|
<span class="normal"><a href="#__codelineno-0-198">198</a></span>
|
|
11583
11697
|
<span class="normal"><a href="#__codelineno-0-199">199</a></span>
|
|
11584
|
-
<span class="normal"><a href="#__codelineno-0-200">200</a></span>
|
|
11585
|
-
<
|
|
11586
|
-
<a id="__codelineno-0-
|
|
11587
|
-
<a id="__codelineno-0-
|
|
11588
|
-
<a id="__codelineno-0-
|
|
11589
|
-
<a id="__codelineno-0-
|
|
11590
|
-
<a id="__codelineno-0-
|
|
11591
|
-
<a id="__codelineno-0-
|
|
11592
|
-
<a id="__codelineno-0-
|
|
11593
|
-
<a id="__codelineno-0-
|
|
11594
|
-
<a id="__codelineno-0-
|
|
11698
|
+
<span class="normal"><a href="#__codelineno-0-200">200</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="k">def</span> <span class="nf">get_limit_choices_to</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
11699
|
+
<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11700
|
+
<a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="sd"> Limit this field to only objects which are assigned to this model's content-type.</span>
|
|
11701
|
+
<a id="__codelineno-0-191" name="__codelineno-0-191"></a>
|
|
11702
|
+
<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> Note that this is implemented via specifying `content_types__app_label=` and `content_types__model=`</span>
|
|
11703
|
+
<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="sd"> rather than via the more obvious `content_types=ContentType.objects.get_for_model(self.model)`</span>
|
|
11704
|
+
<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> because the latter approach would involve a database query, and in some cases</span>
|
|
11705
|
+
<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> (most notably FilterSet definition) this function is called **before** database migrations can be run.</span>
|
|
11706
|
+
<a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="sd"> """</span>
|
|
11707
|
+
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">return</span> <span class="p">{</span>
|
|
11708
|
+
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="s2">"content_types__app_label"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">app_label</span><span class="p">,</span>
|
|
11709
|
+
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="s2">"content_types__model"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model_name</span><span class="p">,</span>
|
|
11710
|
+
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="p">}</span>
|
|
11595
11711
|
</code></pre></div></td></tr></table></div>
|
|
11596
11712
|
</details>
|
|
11597
11713
|
</div>
|
|
@@ -11629,7 +11745,8 @@ while role_1 & role_2 are both available for the Location model.</p>
|
|
|
11629
11745
|
|
|
11630
11746
|
<details class="quote">
|
|
11631
11747
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
11632
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
11748
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-150">150</a></span>
|
|
11749
|
+
<span class="normal"><a href="#__codelineno-0-151">151</a></span>
|
|
11633
11750
|
<span class="normal"><a href="#__codelineno-0-152">152</a></span>
|
|
11634
11751
|
<span class="normal"><a href="#__codelineno-0-153">153</a></span>
|
|
11635
11752
|
<span class="normal"><a href="#__codelineno-0-154">154</a></span>
|
|
@@ -11648,28 +11765,27 @@ while role_1 & role_2 are both available for the Location model.</p>
|
|
|
11648
11765
|
<span class="normal"><a href="#__codelineno-0-167">167</a></span>
|
|
11649
11766
|
<span class="normal"><a href="#__codelineno-0-168">168</a></span>
|
|
11650
11767
|
<span class="normal"><a href="#__codelineno-0-169">169</a></span>
|
|
11651
|
-
<span class="normal"><a href="#__codelineno-0-170">170</a></span>
|
|
11652
|
-
<
|
|
11653
|
-
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="
|
|
11654
|
-
<a id="__codelineno-0-153" name="__codelineno-0-153"></a
|
|
11655
|
-
<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
|
|
11656
|
-
<a id="__codelineno-0-155" name="__codelineno-0-155"></a
|
|
11657
|
-
<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
|
|
11658
|
-
<a id="__codelineno-0-157" name="__codelineno-0-157"></a><span class="sd">
|
|
11659
|
-
<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd">
|
|
11660
|
-
<a id="__codelineno-0-159" name="__codelineno-0-159"></a
|
|
11661
|
-
<a id="__codelineno-0-160" name="__codelineno-0-160"></a>
|
|
11662
|
-
<a id="__codelineno-0-161" name="__codelineno-0-161"></a>
|
|
11663
|
-
<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="
|
|
11664
|
-
<a id="__codelineno-0-163" name="__codelineno-0-163"></a>
|
|
11665
|
-
<a id="__codelineno-0-164" name="__codelineno-0-164"></a>
|
|
11666
|
-
<a id="__codelineno-0-165" name="__codelineno-0-165"></a>
|
|
11667
|
-
<a id="__codelineno-0-166" name="__codelineno-0-166"></a>
|
|
11668
|
-
<a id="__codelineno-0-167" name="__codelineno-0-167"></a>
|
|
11669
|
-
<a id="__codelineno-0-168" name="__codelineno-0-168"></a>
|
|
11670
|
-
<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="
|
|
11671
|
-
<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="
|
|
11672
|
-
<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="bp">self</span><span class="o">.</span><span class="n">remote_field</span><span class="o">.</span><span class="n">related_name</span> <span class="o">=</span> <span class="n">related_name</span>
|
|
11768
|
+
<span class="normal"><a href="#__codelineno-0-170">170</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="k">class</span> <span class="nc">ForeignKeyWithAutoRelatedName</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">):</span>
|
|
11769
|
+
<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11770
|
+
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> Extend base ForeignKey functionality to create a smarter default `related_name`.</span>
|
|
11771
|
+
<a id="__codelineno-0-153" name="__codelineno-0-153"></a>
|
|
11772
|
+
<a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="sd"> For example, "ip_addresses" instead of "ipaddress_set", "ipaddresss", or "ipam_ipaddress_related".</span>
|
|
11773
|
+
<a id="__codelineno-0-155" name="__codelineno-0-155"></a>
|
|
11774
|
+
<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> Primarily useful for cases of abstract base classes that define ForeignKeys, such as</span>
|
|
11775
|
+
<a id="__codelineno-0-157" name="__codelineno-0-157"></a><span class="sd"> `nautobot.dcim.models.device_components.ComponentModel`.</span>
|
|
11776
|
+
<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd"> """</span>
|
|
11777
|
+
<a id="__codelineno-0-159" name="__codelineno-0-159"></a>
|
|
11778
|
+
<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
11779
|
+
<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="n">related_name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
11780
|
+
<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_autogenerate_related_name</span> <span class="o">=</span> <span class="n">related_name</span> <span class="ow">is</span> <span class="kc">None</span>
|
|
11781
|
+
<a id="__codelineno-0-163" name="__codelineno-0-163"></a>
|
|
11782
|
+
<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">def</span> <span class="nf">contribute_to_class</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
11783
|
+
<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">contribute_to_class</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
11784
|
+
<a id="__codelineno-0-166" name="__codelineno-0-166"></a>
|
|
11785
|
+
<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_autogenerate_related_name</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">abstract</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">_meta</span><span class="p">,</span> <span class="s2">"verbose_name_plural"</span><span class="p">):</span>
|
|
11786
|
+
<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="c1"># "IP addresses" -> "ip_addresses"</span>
|
|
11787
|
+
<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="n">related_name</span> <span class="o">=</span> <span class="s2">"_"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\w+"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">verbose_name_plural</span><span class="p">)))</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
11788
|
+
<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="bp">self</span><span class="o">.</span><span class="n">remote_field</span><span class="o">.</span><span class="n">related_name</span> <span class="o">=</span> <span class="n">related_name</span>
|
|
11673
11789
|
</code></pre></div></td></tr></table></div>
|
|
11674
11790
|
</details>
|
|
11675
11791
|
|
|
@@ -11714,17 +11830,7 @@ Replicates ArrayField's base field validation.</p>
|
|
|
11714
11830
|
|
|
11715
11831
|
<details class="quote">
|
|
11716
11832
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
11717
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
11718
|
-
<span class="normal"><a href="#__codelineno-0-266">266</a></span>
|
|
11719
|
-
<span class="normal"><a href="#__codelineno-0-267">267</a></span>
|
|
11720
|
-
<span class="normal"><a href="#__codelineno-0-268">268</a></span>
|
|
11721
|
-
<span class="normal"><a href="#__codelineno-0-269">269</a></span>
|
|
11722
|
-
<span class="normal"><a href="#__codelineno-0-270">270</a></span>
|
|
11723
|
-
<span class="normal"><a href="#__codelineno-0-271">271</a></span>
|
|
11724
|
-
<span class="normal"><a href="#__codelineno-0-272">272</a></span>
|
|
11725
|
-
<span class="normal"><a href="#__codelineno-0-273">273</a></span>
|
|
11726
|
-
<span class="normal"><a href="#__codelineno-0-274">274</a></span>
|
|
11727
|
-
<span class="normal"><a href="#__codelineno-0-275">275</a></span>
|
|
11833
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-275">275</a></span>
|
|
11728
11834
|
<span class="normal"><a href="#__codelineno-0-276">276</a></span>
|
|
11729
11835
|
<span class="normal"><a href="#__codelineno-0-277">277</a></span>
|
|
11730
11836
|
<span class="normal"><a href="#__codelineno-0-278">278</a></span>
|
|
@@ -11819,112 +11925,122 @@ Replicates ArrayField's base field validation.</p>
|
|
|
11819
11925
|
<span class="normal"><a href="#__codelineno-0-367">367</a></span>
|
|
11820
11926
|
<span class="normal"><a href="#__codelineno-0-368">368</a></span>
|
|
11821
11927
|
<span class="normal"><a href="#__codelineno-0-369">369</a></span>
|
|
11822
|
-
<span class="normal"><a href="#__codelineno-0-370">370</a></span
|
|
11823
|
-
<
|
|
11824
|
-
<
|
|
11825
|
-
<
|
|
11826
|
-
<
|
|
11827
|
-
<
|
|
11828
|
-
<
|
|
11829
|
-
<
|
|
11830
|
-
<
|
|
11831
|
-
<
|
|
11832
|
-
<a id="__codelineno-0-275" name="__codelineno-0-275"></a
|
|
11833
|
-
<a id="__codelineno-0-276" name="__codelineno-0-276"></a
|
|
11834
|
-
<a id="__codelineno-0-277" name="__codelineno-0-277"></a
|
|
11835
|
-
<a id="__codelineno-0-278" name="__codelineno-0-278"></a>
|
|
11836
|
-
<a id="__codelineno-0-279" name="__codelineno-0-279"></a
|
|
11837
|
-
<a id="__codelineno-0-280" name="__codelineno-0-280"></a>
|
|
11838
|
-
<a id="__codelineno-0-281" name="__codelineno-0-281"></a>
|
|
11928
|
+
<span class="normal"><a href="#__codelineno-0-370">370</a></span>
|
|
11929
|
+
<span class="normal"><a href="#__codelineno-0-371">371</a></span>
|
|
11930
|
+
<span class="normal"><a href="#__codelineno-0-372">372</a></span>
|
|
11931
|
+
<span class="normal"><a href="#__codelineno-0-373">373</a></span>
|
|
11932
|
+
<span class="normal"><a href="#__codelineno-0-374">374</a></span>
|
|
11933
|
+
<span class="normal"><a href="#__codelineno-0-375">375</a></span>
|
|
11934
|
+
<span class="normal"><a href="#__codelineno-0-376">376</a></span>
|
|
11935
|
+
<span class="normal"><a href="#__codelineno-0-377">377</a></span>
|
|
11936
|
+
<span class="normal"><a href="#__codelineno-0-378">378</a></span>
|
|
11937
|
+
<span class="normal"><a href="#__codelineno-0-379">379</a></span>
|
|
11938
|
+
<span class="normal"><a href="#__codelineno-0-380">380</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-275" name="__codelineno-0-275"></a><span class="k">class</span> <span class="nc">JSONArrayField</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">JSONField</span><span class="p">):</span>
|
|
11939
|
+
<a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11940
|
+
<a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="sd"> An ArrayField implementation backed JSON storage.</span>
|
|
11941
|
+
<a id="__codelineno-0-278" name="__codelineno-0-278"></a><span class="sd"> Replicates ArrayField's base field validation.</span>
|
|
11942
|
+
<a id="__codelineno-0-279" name="__codelineno-0-279"></a><span class="sd"> """</span>
|
|
11943
|
+
<a id="__codelineno-0-280" name="__codelineno-0-280"></a>
|
|
11944
|
+
<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="n">_default_hint</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"list"</span><span class="p">,</span> <span class="s2">"[]"</span><span class="p">)</span>
|
|
11839
11945
|
<a id="__codelineno-0-282" name="__codelineno-0-282"></a>
|
|
11840
|
-
<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="
|
|
11841
|
-
<a id="__codelineno-0-284" name="__codelineno-0-284"></a>
|
|
11842
|
-
<a id="__codelineno-0-285" name="__codelineno-0-285"></a>
|
|
11843
|
-
<a id="__codelineno-0-286" name="__codelineno-0-286"></a>
|
|
11844
|
-
<a id="__codelineno-0-287" name="__codelineno-0-287"></a>
|
|
11845
|
-
<a id="__codelineno-0-288" name="__codelineno-0-288"></a
|
|
11846
|
-
<a id="__codelineno-0-289" name="__codelineno-0-289"></a>
|
|
11847
|
-
<a id="__codelineno-0-290" name="__codelineno-0-290"></a>
|
|
11848
|
-
<a id="__codelineno-0-291" name="__codelineno-0-291"></a>
|
|
11849
|
-
<a id="__codelineno-0-292" name="__codelineno-0-292"></a>
|
|
11850
|
-
<a id="__codelineno-0-293" name="__codelineno-0-293"></a>
|
|
11851
|
-
<a id="__codelineno-0-294" name="__codelineno-0-294"></a>
|
|
11852
|
-
<a id="__codelineno-0-295" name="__codelineno-0-295"></a>
|
|
11853
|
-
<a id="__codelineno-0-296" name="__codelineno-0-296"></a
|
|
11854
|
-
<a id="__codelineno-0-297" name="__codelineno-0-297"></a
|
|
11855
|
-
<a id="__codelineno-0-298" name="__codelineno-0-298"></a><span class="
|
|
11856
|
-
<a id="__codelineno-0-299" name="__codelineno-0-299"></a
|
|
11857
|
-
<a id="__codelineno-0-300" name="__codelineno-0-300"></a><span class="
|
|
11858
|
-
<a id="__codelineno-0-301" name="__codelineno-0-301"></a><span class="
|
|
11859
|
-
<a id="__codelineno-0-302" name="__codelineno-0-302"></a><span class="
|
|
11860
|
-
<a id="__codelineno-0-303" name="__codelineno-0-303"></a><span class="
|
|
11861
|
-
<a id="__codelineno-0-304" name="__codelineno-0-304"></a
|
|
11862
|
-
<a id="__codelineno-0-305" name="__codelineno-0-305"></a><span class="
|
|
11863
|
-
<a id="__codelineno-0-306" name="__codelineno-0-306"></a
|
|
11864
|
-
<a id="__codelineno-0-307" name="__codelineno-0-307"></a
|
|
11865
|
-
<a id="__codelineno-0-308" name="__codelineno-0-308"></a
|
|
11866
|
-
<a id="__codelineno-0-309" name="__codelineno-0-309"></a
|
|
11867
|
-
<a id="__codelineno-0-310" name="__codelineno-0-310"></a
|
|
11868
|
-
<a id="__codelineno-0-311" name="__codelineno-0-311"></a
|
|
11869
|
-
<a id="__codelineno-0-312" name="__codelineno-0-312"></a
|
|
11870
|
-
<a id="__codelineno-0-313" name="__codelineno-0-313"></a>
|
|
11871
|
-
<a id="__codelineno-0-314" name="__codelineno-0-314"></a
|
|
11872
|
-
<a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="
|
|
11873
|
-
<a id="__codelineno-0-316" name="__codelineno-0-316"></a><span class="
|
|
11874
|
-
<a id="__codelineno-0-317" name="__codelineno-0-317"></a
|
|
11875
|
-
<a id="__codelineno-0-318" name="__codelineno-0-318"></a
|
|
11876
|
-
<a id="__codelineno-0-319" name="__codelineno-0-319"></a>
|
|
11877
|
-
<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="
|
|
11878
|
-
<a id="__codelineno-0-321" name="__codelineno-0-321"></a>
|
|
11879
|
-
<a id="__codelineno-0-322" name="__codelineno-0-322"></a>
|
|
11880
|
-
<a id="__codelineno-0-323" name="__codelineno-0-323"></a>
|
|
11881
|
-
<a id="__codelineno-0-324" name="__codelineno-0-324"></a>
|
|
11882
|
-
<a id="__codelineno-0-325" name="__codelineno-0-325"></a
|
|
11883
|
-
<a id="__codelineno-0-326" name="__codelineno-0-326"></a
|
|
11884
|
-
<a id="__codelineno-0-327" name="__codelineno-0-327"></a>
|
|
11885
|
-
<a id="__codelineno-0-328" name="__codelineno-0-328"></a
|
|
11886
|
-
<a id="__codelineno-0-329" name="__codelineno-0-329"></a><span class="
|
|
11887
|
-
<a id="__codelineno-0-330" name="__codelineno-0-330"></a
|
|
11888
|
-
<a id="__codelineno-0-331" name="__codelineno-0-331"></a
|
|
11889
|
-
<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="
|
|
11890
|
-
<a id="__codelineno-0-333" name="__codelineno-0-333"></a>
|
|
11891
|
-
<a id="__codelineno-0-334" name="__codelineno-0-334"></a>
|
|
11892
|
-
<a id="__codelineno-0-335" name="__codelineno-0-335"></a>
|
|
11893
|
-
<a id="__codelineno-0-336" name="__codelineno-0-336"></a>
|
|
11894
|
-
<a id="__codelineno-0-337" name="__codelineno-0-337"></a>
|
|
11895
|
-
<a id="__codelineno-0-338" name="__codelineno-0-338"></a>
|
|
11896
|
-
<a id="__codelineno-0-339" name="__codelineno-0-339"></a
|
|
11897
|
-
<a id="__codelineno-0-340" name="__codelineno-0-340"></a
|
|
11898
|
-
<a id="__codelineno-0-341" name="__codelineno-0-341"></a
|
|
11899
|
-
<a id="__codelineno-0-342" name="__codelineno-0-342"></a
|
|
11900
|
-
<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="
|
|
11901
|
-
<a id="__codelineno-0-344" name="__codelineno-0-344"></a>
|
|
11902
|
-
<a id="__codelineno-0-345" name="__codelineno-0-345"></a>
|
|
11903
|
-
<a id="__codelineno-0-346" name="__codelineno-0-346"></a
|
|
11904
|
-
<a id="__codelineno-0-347" name="__codelineno-0-347"></a
|
|
11905
|
-
<a id="__codelineno-0-348" name="__codelineno-0-348"></a
|
|
11906
|
-
<a id="__codelineno-0-349" name="__codelineno-0-349"></a>
|
|
11907
|
-
<a id="__codelineno-0-350" name="__codelineno-0-350"></a>
|
|
11908
|
-
<a id="__codelineno-0-351" name="__codelineno-0-351"></a>
|
|
11909
|
-
<a id="__codelineno-0-352" name="__codelineno-0-352"></a>
|
|
11910
|
-
<a id="__codelineno-0-353" name="__codelineno-0-353"></a>
|
|
11911
|
-
<a id="__codelineno-0-354" name="__codelineno-0-354"></a
|
|
11912
|
-
<a id="__codelineno-0-355" name="__codelineno-0-355"></a><span class="
|
|
11913
|
-
<a id="__codelineno-0-356" name="__codelineno-0-356"></a><span class="
|
|
11914
|
-
<a id="__codelineno-0-357" name="__codelineno-0-357"></a><span class="sd">
|
|
11915
|
-
<a id="__codelineno-0-358" name="__codelineno-0-358"></a
|
|
11916
|
-
<a id="__codelineno-0-359" name="__codelineno-0-359"></a> <span class="
|
|
11917
|
-
<a id="__codelineno-0-360" name="__codelineno-0-360"></a>
|
|
11918
|
-
<a id="__codelineno-0-361" name="__codelineno-0-361"></a>
|
|
11919
|
-
<a id="__codelineno-0-362" name="__codelineno-0-362"></a>
|
|
11920
|
-
<a id="__codelineno-0-363" name="__codelineno-0-363"></a><span class="
|
|
11921
|
-
<a id="__codelineno-0-364" name="__codelineno-0-364"></a
|
|
11922
|
-
<a id="__codelineno-0-365" name="__codelineno-0-365"></a
|
|
11923
|
-
<a id="__codelineno-0-366" name="__codelineno-0-366"></a
|
|
11924
|
-
<a id="__codelineno-0-367" name="__codelineno-0-367"></a
|
|
11925
|
-
<a id="__codelineno-0-368" name="__codelineno-0-368"></a>
|
|
11926
|
-
<a id="__codelineno-0-369" name="__codelineno-0-369"></a>
|
|
11927
|
-
<a id="__codelineno-0-370" name="__codelineno-0-370"></a>
|
|
11946
|
+
<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base_field</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
11947
|
+
<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">base_field</span><span class="p">,</span> <span class="n">JSONArrayField</span><span class="p">):</span>
|
|
11948
|
+
<a id="__codelineno-0-285" name="__codelineno-0-285"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">"cannot nest JSONArrayFields"</span><span class="p">)</span>
|
|
11949
|
+
<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span> <span class="o">=</span> <span class="n">base_field</span>
|
|
11950
|
+
<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
11951
|
+
<a id="__codelineno-0-288" name="__codelineno-0-288"></a>
|
|
11952
|
+
<a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="k">def</span> <span class="nf">set_attributes_from_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
11953
|
+
<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">set_attributes_from_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
11954
|
+
<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">set_attributes_from_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
11955
|
+
<a id="__codelineno-0-292" name="__codelineno-0-292"></a>
|
|
11956
|
+
<a id="__codelineno-0-293" name="__codelineno-0-293"></a> <span class="nd">@property</span>
|
|
11957
|
+
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
11958
|
+
<a id="__codelineno-0-295" name="__codelineno-0-295"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"JSON Array of </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">description</span><span class="si">}</span><span class="s2">"</span>
|
|
11959
|
+
<a id="__codelineno-0-296" name="__codelineno-0-296"></a>
|
|
11960
|
+
<a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="k">def</span> <span class="nf">get_prep_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
11961
|
+
<a id="__codelineno-0-298" name="__codelineno-0-298"></a><span class="w"> </span><span class="sd">"""Perform preliminary non-db specific value checks and conversions."""</span>
|
|
11962
|
+
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
11963
|
+
<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
|
|
11964
|
+
<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"value </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> is not list or tuple"</span><span class="p">)</span>
|
|
11965
|
+
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">get_prep_value</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">]</span>
|
|
11966
|
+
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_prep_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
11967
|
+
<a id="__codelineno-0-304" name="__codelineno-0-304"></a>
|
|
11968
|
+
<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="k">def</span> <span class="nf">deconstruct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
11969
|
+
<a id="__codelineno-0-306" name="__codelineno-0-306"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11970
|
+
<a id="__codelineno-0-307" name="__codelineno-0-307"></a><span class="sd"> Return enough information to recreate the field as a 4-tuple:</span>
|
|
11971
|
+
<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="sd"> * The name of the field on the model, if contribute_to_class() has</span>
|
|
11972
|
+
<a id="__codelineno-0-309" name="__codelineno-0-309"></a><span class="sd"> been run.</span>
|
|
11973
|
+
<a id="__codelineno-0-310" name="__codelineno-0-310"></a><span class="sd"> * The import path of the field, including the class:e.g.</span>
|
|
11974
|
+
<a id="__codelineno-0-311" name="__codelineno-0-311"></a><span class="sd"> django.db.models.IntegerField This should be the most portable</span>
|
|
11975
|
+
<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="sd"> version, so less specific may be better.</span>
|
|
11976
|
+
<a id="__codelineno-0-313" name="__codelineno-0-313"></a><span class="sd"> * A list of positional arguments.</span>
|
|
11977
|
+
<a id="__codelineno-0-314" name="__codelineno-0-314"></a><span class="sd"> * A dict of keyword arguments.</span>
|
|
11978
|
+
<a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="sd"> """</span>
|
|
11979
|
+
<a id="__codelineno-0-316" name="__codelineno-0-316"></a> <span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">deconstruct</span><span class="p">()</span>
|
|
11980
|
+
<a id="__codelineno-0-317" name="__codelineno-0-317"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
|
|
11981
|
+
<a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="p">{</span>
|
|
11982
|
+
<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="s2">"base_field"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">clone</span><span class="p">(),</span>
|
|
11983
|
+
<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="p">}</span>
|
|
11984
|
+
<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="p">)</span>
|
|
11985
|
+
<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="k">return</span> <span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span>
|
|
11986
|
+
<a id="__codelineno-0-323" name="__codelineno-0-323"></a>
|
|
11987
|
+
<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
11988
|
+
<a id="__codelineno-0-325" name="__codelineno-0-325"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11989
|
+
<a id="__codelineno-0-326" name="__codelineno-0-326"></a><span class="sd"> Convert `value` into JSON, raising django.core.exceptions.ValidationError</span>
|
|
11990
|
+
<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="sd"> if the data can't be converted. Return the converted value.</span>
|
|
11991
|
+
<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="sd"> """</span>
|
|
11992
|
+
<a id="__codelineno-0-329" name="__codelineno-0-329"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
11993
|
+
<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="k">try</span><span class="p">:</span>
|
|
11994
|
+
<a id="__codelineno-0-331" name="__codelineno-0-331"></a> <span class="c1"># Assume we're deserializing</span>
|
|
11995
|
+
<a id="__codelineno-0-332" name="__codelineno-0-332"></a> <span class="n">vals</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
11996
|
+
<a id="__codelineno-0-333" name="__codelineno-0-333"></a> <span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span>
|
|
11997
|
+
<a id="__codelineno-0-334" name="__codelineno-0-334"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">JSONDecodeError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
11998
|
+
<a id="__codelineno-0-335" name="__codelineno-0-335"></a> <span class="k">raise</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
11999
|
+
<a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="k">return</span> <span class="n">value</span>
|
|
12000
|
+
<a id="__codelineno-0-337" name="__codelineno-0-337"></a>
|
|
12001
|
+
<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="k">def</span> <span class="nf">value_to_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
|
12002
|
+
<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12003
|
+
<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> Return a string value of this field from the passed obj.</span>
|
|
12004
|
+
<a id="__codelineno-0-341" name="__codelineno-0-341"></a><span class="sd"> This is used by the serialization framework.</span>
|
|
12005
|
+
<a id="__codelineno-0-342" name="__codelineno-0-342"></a><span class="sd"> """</span>
|
|
12006
|
+
<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
|
|
12007
|
+
<a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="n">vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">value_from_object</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
|
12008
|
+
<a id="__codelineno-0-345" name="__codelineno-0-345"></a> <span class="n">base_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span>
|
|
12009
|
+
<a id="__codelineno-0-346" name="__codelineno-0-346"></a>
|
|
12010
|
+
<a id="__codelineno-0-347" name="__codelineno-0-347"></a> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">:</span>
|
|
12011
|
+
<a id="__codelineno-0-348" name="__codelineno-0-348"></a> <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
12012
|
+
<a id="__codelineno-0-349" name="__codelineno-0-349"></a> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
12013
|
+
<a id="__codelineno-0-350" name="__codelineno-0-350"></a> <span class="k">else</span><span class="p">:</span>
|
|
12014
|
+
<a id="__codelineno-0-351" name="__codelineno-0-351"></a> <span class="n">obj</span> <span class="o">=</span> <span class="n">AttributeSetter</span><span class="p">(</span><span class="n">base_field</span><span class="o">.</span><span class="n">attname</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
|
|
12015
|
+
<a id="__codelineno-0-352" name="__codelineno-0-352"></a> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">base_field</span><span class="o">.</span><span class="n">value_to_string</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span>
|
|
12016
|
+
<a id="__codelineno-0-353" name="__codelineno-0-353"></a> <span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">ensure_ascii</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
12017
|
+
<a id="__codelineno-0-354" name="__codelineno-0-354"></a>
|
|
12018
|
+
<a id="__codelineno-0-355" name="__codelineno-0-355"></a> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">):</span>
|
|
12019
|
+
<a id="__codelineno-0-356" name="__codelineno-0-356"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12020
|
+
<a id="__codelineno-0-357" name="__codelineno-0-357"></a><span class="sd"> Validate `value` and raise ValidationError if necessary.</span>
|
|
12021
|
+
<a id="__codelineno-0-358" name="__codelineno-0-358"></a><span class="sd"> """</span>
|
|
12022
|
+
<a id="__codelineno-0-359" name="__codelineno-0-359"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">)</span>
|
|
12023
|
+
<a id="__codelineno-0-360" name="__codelineno-0-360"></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
12024
|
+
<a id="__codelineno-0-361" name="__codelineno-0-361"></a> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">)</span>
|
|
12025
|
+
<a id="__codelineno-0-362" name="__codelineno-0-362"></a>
|
|
12026
|
+
<a id="__codelineno-0-363" name="__codelineno-0-363"></a> <span class="k">def</span> <span class="nf">run_validators</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
12027
|
+
<a id="__codelineno-0-364" name="__codelineno-0-364"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12028
|
+
<a id="__codelineno-0-365" name="__codelineno-0-365"></a><span class="sd"> Runs all validators against `value` and raise ValidationError if necessary.</span>
|
|
12029
|
+
<a id="__codelineno-0-366" name="__codelineno-0-366"></a><span class="sd"> Some validators can't be created at field initialization time.</span>
|
|
12030
|
+
<a id="__codelineno-0-367" name="__codelineno-0-367"></a><span class="sd"> """</span>
|
|
12031
|
+
<a id="__codelineno-0-368" name="__codelineno-0-368"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">run_validators</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
12032
|
+
<a id="__codelineno-0-369" name="__codelineno-0-369"></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
12033
|
+
<a id="__codelineno-0-370" name="__codelineno-0-370"></a> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">run_validators</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
|
|
12034
|
+
<a id="__codelineno-0-371" name="__codelineno-0-371"></a>
|
|
12035
|
+
<a id="__codelineno-0-372" name="__codelineno-0-372"></a> <span class="k">def</span> <span class="nf">formfield</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
12036
|
+
<a id="__codelineno-0-373" name="__codelineno-0-373"></a><span class="w"> </span><span class="sd">"""Return a django.forms.Field instance for this field."""</span>
|
|
12037
|
+
<a id="__codelineno-0-374" name="__codelineno-0-374"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">formfield</span><span class="p">(</span>
|
|
12038
|
+
<a id="__codelineno-0-375" name="__codelineno-0-375"></a> <span class="o">**</span><span class="p">{</span>
|
|
12039
|
+
<a id="__codelineno-0-376" name="__codelineno-0-376"></a> <span class="s2">"form_class"</span><span class="p">:</span> <span class="n">fields</span><span class="o">.</span><span class="n">JSONArrayFormField</span><span class="p">,</span>
|
|
12040
|
+
<a id="__codelineno-0-377" name="__codelineno-0-377"></a> <span class="s2">"base_field"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">formfield</span><span class="p">(),</span>
|
|
12041
|
+
<a id="__codelineno-0-378" name="__codelineno-0-378"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
12042
|
+
<a id="__codelineno-0-379" name="__codelineno-0-379"></a> <span class="p">}</span>
|
|
12043
|
+
<a id="__codelineno-0-380" name="__codelineno-0-380"></a> <span class="p">)</span>
|
|
11928
12044
|
</code></pre></div></td></tr></table></div>
|
|
11929
12045
|
</details>
|
|
11930
12046
|
|
|
@@ -11968,41 +12084,41 @@ Replicates ArrayField's base field validation.</p>
|
|
|
11968
12084
|
</details>
|
|
11969
12085
|
<details class="quote">
|
|
11970
12086
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
11971
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
11972
|
-
<span class="normal"><a href="#__codelineno-0-296">296</a></span>
|
|
11973
|
-
<span class="normal"><a href="#__codelineno-0-297">297</a></span>
|
|
11974
|
-
<span class="normal"><a href="#__codelineno-0-298">298</a></span>
|
|
11975
|
-
<span class="normal"><a href="#__codelineno-0-299">299</a></span>
|
|
11976
|
-
<span class="normal"><a href="#__codelineno-0-300">300</a></span>
|
|
11977
|
-
<span class="normal"><a href="#__codelineno-0-301">301</a></span>
|
|
11978
|
-
<span class="normal"><a href="#__codelineno-0-302">302</a></span>
|
|
11979
|
-
<span class="normal"><a href="#__codelineno-0-303">303</a></span>
|
|
11980
|
-
<span class="normal"><a href="#__codelineno-0-304">304</a></span>
|
|
11981
|
-
<span class="normal"><a href="#__codelineno-0-305">305</a></span>
|
|
12087
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-305">305</a></span>
|
|
11982
12088
|
<span class="normal"><a href="#__codelineno-0-306">306</a></span>
|
|
11983
12089
|
<span class="normal"><a href="#__codelineno-0-307">307</a></span>
|
|
11984
12090
|
<span class="normal"><a href="#__codelineno-0-308">308</a></span>
|
|
11985
12091
|
<span class="normal"><a href="#__codelineno-0-309">309</a></span>
|
|
11986
12092
|
<span class="normal"><a href="#__codelineno-0-310">310</a></span>
|
|
11987
12093
|
<span class="normal"><a href="#__codelineno-0-311">311</a></span>
|
|
11988
|
-
<span class="normal"><a href="#__codelineno-0-312">312</a></span
|
|
11989
|
-
<
|
|
11990
|
-
<
|
|
11991
|
-
<
|
|
11992
|
-
<
|
|
11993
|
-
<
|
|
11994
|
-
<
|
|
11995
|
-
<
|
|
11996
|
-
<
|
|
11997
|
-
<
|
|
11998
|
-
<a id="__codelineno-0-305" name="__codelineno-0-305"></a><span class="
|
|
11999
|
-
<a id="__codelineno-0-306" name="__codelineno-0-306"></a
|
|
12000
|
-
<a id="__codelineno-0-307" name="__codelineno-0-307"></a
|
|
12001
|
-
<a id="__codelineno-0-308" name="__codelineno-0-308"></a
|
|
12002
|
-
<a id="__codelineno-0-309" name="__codelineno-0-309"></a
|
|
12003
|
-
<a id="__codelineno-0-310" name="__codelineno-0-310"></a
|
|
12004
|
-
<a id="__codelineno-0-311" name="__codelineno-0-311"></a
|
|
12005
|
-
<a id="__codelineno-0-312" name="__codelineno-0-312"></a
|
|
12094
|
+
<span class="normal"><a href="#__codelineno-0-312">312</a></span>
|
|
12095
|
+
<span class="normal"><a href="#__codelineno-0-313">313</a></span>
|
|
12096
|
+
<span class="normal"><a href="#__codelineno-0-314">314</a></span>
|
|
12097
|
+
<span class="normal"><a href="#__codelineno-0-315">315</a></span>
|
|
12098
|
+
<span class="normal"><a href="#__codelineno-0-316">316</a></span>
|
|
12099
|
+
<span class="normal"><a href="#__codelineno-0-317">317</a></span>
|
|
12100
|
+
<span class="normal"><a href="#__codelineno-0-318">318</a></span>
|
|
12101
|
+
<span class="normal"><a href="#__codelineno-0-319">319</a></span>
|
|
12102
|
+
<span class="normal"><a href="#__codelineno-0-320">320</a></span>
|
|
12103
|
+
<span class="normal"><a href="#__codelineno-0-321">321</a></span>
|
|
12104
|
+
<span class="normal"><a href="#__codelineno-0-322">322</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-305" name="__codelineno-0-305"></a><span class="k">def</span> <span class="nf">deconstruct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
12105
|
+
<a id="__codelineno-0-306" name="__codelineno-0-306"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12106
|
+
<a id="__codelineno-0-307" name="__codelineno-0-307"></a><span class="sd"> Return enough information to recreate the field as a 4-tuple:</span>
|
|
12107
|
+
<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="sd"> * The name of the field on the model, if contribute_to_class() has</span>
|
|
12108
|
+
<a id="__codelineno-0-309" name="__codelineno-0-309"></a><span class="sd"> been run.</span>
|
|
12109
|
+
<a id="__codelineno-0-310" name="__codelineno-0-310"></a><span class="sd"> * The import path of the field, including the class:e.g.</span>
|
|
12110
|
+
<a id="__codelineno-0-311" name="__codelineno-0-311"></a><span class="sd"> django.db.models.IntegerField This should be the most portable</span>
|
|
12111
|
+
<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="sd"> version, so less specific may be better.</span>
|
|
12112
|
+
<a id="__codelineno-0-313" name="__codelineno-0-313"></a><span class="sd"> * A list of positional arguments.</span>
|
|
12113
|
+
<a id="__codelineno-0-314" name="__codelineno-0-314"></a><span class="sd"> * A dict of keyword arguments.</span>
|
|
12114
|
+
<a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="sd"> """</span>
|
|
12115
|
+
<a id="__codelineno-0-316" name="__codelineno-0-316"></a> <span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">deconstruct</span><span class="p">()</span>
|
|
12116
|
+
<a id="__codelineno-0-317" name="__codelineno-0-317"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
|
|
12117
|
+
<a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="p">{</span>
|
|
12118
|
+
<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="s2">"base_field"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">clone</span><span class="p">(),</span>
|
|
12119
|
+
<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="p">}</span>
|
|
12120
|
+
<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="p">)</span>
|
|
12121
|
+
<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="k">return</span> <span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span>
|
|
12006
12122
|
</code></pre></div></td></tr></table></div>
|
|
12007
12123
|
</details>
|
|
12008
12124
|
</div>
|
|
@@ -12026,23 +12142,23 @@ Replicates ArrayField's base field validation.</p>
|
|
|
12026
12142
|
|
|
12027
12143
|
<details class="quote">
|
|
12028
12144
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12029
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12030
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12031
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12032
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12033
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12034
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12035
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12036
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12037
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12038
|
-
<a id="__codelineno-0-
|
|
12039
|
-
<a id="__codelineno-0-
|
|
12040
|
-
<a id="__codelineno-0-
|
|
12041
|
-
<a id="__codelineno-0-
|
|
12042
|
-
<a id="__codelineno-0-
|
|
12043
|
-
<a id="__codelineno-0-
|
|
12044
|
-
<a id="__codelineno-0-
|
|
12045
|
-
<a id="__codelineno-0-
|
|
12145
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-372">372</a></span>
|
|
12146
|
+
<span class="normal"><a href="#__codelineno-0-373">373</a></span>
|
|
12147
|
+
<span class="normal"><a href="#__codelineno-0-374">374</a></span>
|
|
12148
|
+
<span class="normal"><a href="#__codelineno-0-375">375</a></span>
|
|
12149
|
+
<span class="normal"><a href="#__codelineno-0-376">376</a></span>
|
|
12150
|
+
<span class="normal"><a href="#__codelineno-0-377">377</a></span>
|
|
12151
|
+
<span class="normal"><a href="#__codelineno-0-378">378</a></span>
|
|
12152
|
+
<span class="normal"><a href="#__codelineno-0-379">379</a></span>
|
|
12153
|
+
<span class="normal"><a href="#__codelineno-0-380">380</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-372" name="__codelineno-0-372"></a><span class="k">def</span> <span class="nf">formfield</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
12154
|
+
<a id="__codelineno-0-373" name="__codelineno-0-373"></a><span class="w"> </span><span class="sd">"""Return a django.forms.Field instance for this field."""</span>
|
|
12155
|
+
<a id="__codelineno-0-374" name="__codelineno-0-374"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">formfield</span><span class="p">(</span>
|
|
12156
|
+
<a id="__codelineno-0-375" name="__codelineno-0-375"></a> <span class="o">**</span><span class="p">{</span>
|
|
12157
|
+
<a id="__codelineno-0-376" name="__codelineno-0-376"></a> <span class="s2">"form_class"</span><span class="p">:</span> <span class="n">fields</span><span class="o">.</span><span class="n">JSONArrayFormField</span><span class="p">,</span>
|
|
12158
|
+
<a id="__codelineno-0-377" name="__codelineno-0-377"></a> <span class="s2">"base_field"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">formfield</span><span class="p">(),</span>
|
|
12159
|
+
<a id="__codelineno-0-378" name="__codelineno-0-378"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
12160
|
+
<a id="__codelineno-0-379" name="__codelineno-0-379"></a> <span class="p">}</span>
|
|
12161
|
+
<a id="__codelineno-0-380" name="__codelineno-0-380"></a> <span class="p">)</span>
|
|
12046
12162
|
</code></pre></div></td></tr></table></div>
|
|
12047
12163
|
</details>
|
|
12048
12164
|
</div>
|
|
@@ -12066,19 +12182,19 @@ Replicates ArrayField's base field validation.</p>
|
|
|
12066
12182
|
|
|
12067
12183
|
<details class="quote">
|
|
12068
12184
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12069
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12070
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12071
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12072
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12073
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12074
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12075
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12076
|
-
<a id="__codelineno-0-
|
|
12077
|
-
<a id="__codelineno-0-
|
|
12078
|
-
<a id="__codelineno-0-
|
|
12079
|
-
<a id="__codelineno-0-
|
|
12080
|
-
<a id="__codelineno-0-
|
|
12081
|
-
<a id="__codelineno-0-
|
|
12185
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-297">297</a></span>
|
|
12186
|
+
<span class="normal"><a href="#__codelineno-0-298">298</a></span>
|
|
12187
|
+
<span class="normal"><a href="#__codelineno-0-299">299</a></span>
|
|
12188
|
+
<span class="normal"><a href="#__codelineno-0-300">300</a></span>
|
|
12189
|
+
<span class="normal"><a href="#__codelineno-0-301">301</a></span>
|
|
12190
|
+
<span class="normal"><a href="#__codelineno-0-302">302</a></span>
|
|
12191
|
+
<span class="normal"><a href="#__codelineno-0-303">303</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-297" name="__codelineno-0-297"></a><span class="k">def</span> <span class="nf">get_prep_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
12192
|
+
<a id="__codelineno-0-298" name="__codelineno-0-298"></a><span class="w"> </span><span class="sd">"""Perform preliminary non-db specific value checks and conversions."""</span>
|
|
12193
|
+
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
12194
|
+
<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
|
|
12195
|
+
<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"value </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> is not list or tuple"</span><span class="p">)</span>
|
|
12196
|
+
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">get_prep_value</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">]</span>
|
|
12197
|
+
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_prep_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
12082
12198
|
</code></pre></div></td></tr></table></div>
|
|
12083
12199
|
</details>
|
|
12084
12200
|
</div>
|
|
@@ -12103,21 +12219,21 @@ Some validators can't be created at field initialization time.</p>
|
|
|
12103
12219
|
|
|
12104
12220
|
<details class="quote">
|
|
12105
12221
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12106
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12107
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12108
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12109
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12110
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12111
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12112
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12113
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12114
|
-
<a id="__codelineno-0-
|
|
12115
|
-
<a id="__codelineno-0-
|
|
12116
|
-
<a id="__codelineno-0-
|
|
12117
|
-
<a id="__codelineno-0-
|
|
12118
|
-
<a id="__codelineno-0-
|
|
12119
|
-
<a id="__codelineno-0-
|
|
12120
|
-
<a id="__codelineno-0-
|
|
12222
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-363">363</a></span>
|
|
12223
|
+
<span class="normal"><a href="#__codelineno-0-364">364</a></span>
|
|
12224
|
+
<span class="normal"><a href="#__codelineno-0-365">365</a></span>
|
|
12225
|
+
<span class="normal"><a href="#__codelineno-0-366">366</a></span>
|
|
12226
|
+
<span class="normal"><a href="#__codelineno-0-367">367</a></span>
|
|
12227
|
+
<span class="normal"><a href="#__codelineno-0-368">368</a></span>
|
|
12228
|
+
<span class="normal"><a href="#__codelineno-0-369">369</a></span>
|
|
12229
|
+
<span class="normal"><a href="#__codelineno-0-370">370</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-363" name="__codelineno-0-363"></a><span class="k">def</span> <span class="nf">run_validators</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
12230
|
+
<a id="__codelineno-0-364" name="__codelineno-0-364"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12231
|
+
<a id="__codelineno-0-365" name="__codelineno-0-365"></a><span class="sd"> Runs all validators against `value` and raise ValidationError if necessary.</span>
|
|
12232
|
+
<a id="__codelineno-0-366" name="__codelineno-0-366"></a><span class="sd"> Some validators can't be created at field initialization time.</span>
|
|
12233
|
+
<a id="__codelineno-0-367" name="__codelineno-0-367"></a><span class="sd"> """</span>
|
|
12234
|
+
<a id="__codelineno-0-368" name="__codelineno-0-368"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">run_validators</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
12235
|
+
<a id="__codelineno-0-369" name="__codelineno-0-369"></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
12236
|
+
<a id="__codelineno-0-370" name="__codelineno-0-370"></a> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">run_validators</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
|
|
12121
12237
|
</code></pre></div></td></tr></table></div>
|
|
12122
12238
|
</details>
|
|
12123
12239
|
</div>
|
|
@@ -12142,31 +12258,31 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
12142
12258
|
|
|
12143
12259
|
<details class="quote">
|
|
12144
12260
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12145
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12146
|
-
<span class="normal"><a href="#__codelineno-0-315">315</a></span>
|
|
12147
|
-
<span class="normal"><a href="#__codelineno-0-316">316</a></span>
|
|
12148
|
-
<span class="normal"><a href="#__codelineno-0-317">317</a></span>
|
|
12149
|
-
<span class="normal"><a href="#__codelineno-0-318">318</a></span>
|
|
12150
|
-
<span class="normal"><a href="#__codelineno-0-319">319</a></span>
|
|
12151
|
-
<span class="normal"><a href="#__codelineno-0-320">320</a></span>
|
|
12152
|
-
<span class="normal"><a href="#__codelineno-0-321">321</a></span>
|
|
12153
|
-
<span class="normal"><a href="#__codelineno-0-322">322</a></span>
|
|
12154
|
-
<span class="normal"><a href="#__codelineno-0-323">323</a></span>
|
|
12155
|
-
<span class="normal"><a href="#__codelineno-0-324">324</a></span>
|
|
12261
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-324">324</a></span>
|
|
12156
12262
|
<span class="normal"><a href="#__codelineno-0-325">325</a></span>
|
|
12157
|
-
<span class="normal"><a href="#__codelineno-0-326">326</a></span
|
|
12158
|
-
<
|
|
12159
|
-
<
|
|
12160
|
-
<
|
|
12161
|
-
<
|
|
12162
|
-
<
|
|
12163
|
-
<
|
|
12164
|
-
<
|
|
12165
|
-
<
|
|
12166
|
-
<
|
|
12167
|
-
<
|
|
12168
|
-
<a id="__codelineno-0-325" name="__codelineno-0-325"></a
|
|
12169
|
-
<a id="__codelineno-0-326" name="__codelineno-0-326"></a
|
|
12263
|
+
<span class="normal"><a href="#__codelineno-0-326">326</a></span>
|
|
12264
|
+
<span class="normal"><a href="#__codelineno-0-327">327</a></span>
|
|
12265
|
+
<span class="normal"><a href="#__codelineno-0-328">328</a></span>
|
|
12266
|
+
<span class="normal"><a href="#__codelineno-0-329">329</a></span>
|
|
12267
|
+
<span class="normal"><a href="#__codelineno-0-330">330</a></span>
|
|
12268
|
+
<span class="normal"><a href="#__codelineno-0-331">331</a></span>
|
|
12269
|
+
<span class="normal"><a href="#__codelineno-0-332">332</a></span>
|
|
12270
|
+
<span class="normal"><a href="#__codelineno-0-333">333</a></span>
|
|
12271
|
+
<span class="normal"><a href="#__codelineno-0-334">334</a></span>
|
|
12272
|
+
<span class="normal"><a href="#__codelineno-0-335">335</a></span>
|
|
12273
|
+
<span class="normal"><a href="#__codelineno-0-336">336</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-324" name="__codelineno-0-324"></a><span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
12274
|
+
<a id="__codelineno-0-325" name="__codelineno-0-325"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12275
|
+
<a id="__codelineno-0-326" name="__codelineno-0-326"></a><span class="sd"> Convert `value` into JSON, raising django.core.exceptions.ValidationError</span>
|
|
12276
|
+
<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="sd"> if the data can't be converted. Return the converted value.</span>
|
|
12277
|
+
<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="sd"> """</span>
|
|
12278
|
+
<a id="__codelineno-0-329" name="__codelineno-0-329"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
12279
|
+
<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="k">try</span><span class="p">:</span>
|
|
12280
|
+
<a id="__codelineno-0-331" name="__codelineno-0-331"></a> <span class="c1"># Assume we're deserializing</span>
|
|
12281
|
+
<a id="__codelineno-0-332" name="__codelineno-0-332"></a> <span class="n">vals</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
12282
|
+
<a id="__codelineno-0-333" name="__codelineno-0-333"></a> <span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span>
|
|
12283
|
+
<a id="__codelineno-0-334" name="__codelineno-0-334"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">JSONDecodeError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
12284
|
+
<a id="__codelineno-0-335" name="__codelineno-0-335"></a> <span class="k">raise</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
12285
|
+
<a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="k">return</span> <span class="n">value</span>
|
|
12170
12286
|
</code></pre></div></td></tr></table></div>
|
|
12171
12287
|
</details>
|
|
12172
12288
|
</div>
|
|
@@ -12190,19 +12306,19 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
12190
12306
|
|
|
12191
12307
|
<details class="quote">
|
|
12192
12308
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12193
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12194
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12195
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12196
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12197
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12198
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12199
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12200
|
-
<a id="__codelineno-0-
|
|
12201
|
-
<a id="__codelineno-0-
|
|
12202
|
-
<a id="__codelineno-0-
|
|
12203
|
-
<a id="__codelineno-0-
|
|
12204
|
-
<a id="__codelineno-0-
|
|
12205
|
-
<a id="__codelineno-0-
|
|
12309
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-355">355</a></span>
|
|
12310
|
+
<span class="normal"><a href="#__codelineno-0-356">356</a></span>
|
|
12311
|
+
<span class="normal"><a href="#__codelineno-0-357">357</a></span>
|
|
12312
|
+
<span class="normal"><a href="#__codelineno-0-358">358</a></span>
|
|
12313
|
+
<span class="normal"><a href="#__codelineno-0-359">359</a></span>
|
|
12314
|
+
<span class="normal"><a href="#__codelineno-0-360">360</a></span>
|
|
12315
|
+
<span class="normal"><a href="#__codelineno-0-361">361</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-355" name="__codelineno-0-355"></a><span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">):</span>
|
|
12316
|
+
<a id="__codelineno-0-356" name="__codelineno-0-356"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12317
|
+
<a id="__codelineno-0-357" name="__codelineno-0-357"></a><span class="sd"> Validate `value` and raise ValidationError if necessary.</span>
|
|
12318
|
+
<a id="__codelineno-0-358" name="__codelineno-0-358"></a><span class="sd"> """</span>
|
|
12319
|
+
<a id="__codelineno-0-359" name="__codelineno-0-359"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">)</span>
|
|
12320
|
+
<a id="__codelineno-0-360" name="__codelineno-0-360"></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
12321
|
+
<a id="__codelineno-0-361" name="__codelineno-0-361"></a> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">)</span>
|
|
12206
12322
|
</code></pre></div></td></tr></table></div>
|
|
12207
12323
|
</details>
|
|
12208
12324
|
</div>
|
|
@@ -12227,37 +12343,37 @@ This is used by the serialization framework.</p>
|
|
|
12227
12343
|
|
|
12228
12344
|
<details class="quote">
|
|
12229
12345
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12230
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12231
|
-
<span class="normal"><a href="#__codelineno-0-329">329</a></span>
|
|
12232
|
-
<span class="normal"><a href="#__codelineno-0-330">330</a></span>
|
|
12233
|
-
<span class="normal"><a href="#__codelineno-0-331">331</a></span>
|
|
12234
|
-
<span class="normal"><a href="#__codelineno-0-332">332</a></span>
|
|
12235
|
-
<span class="normal"><a href="#__codelineno-0-333">333</a></span>
|
|
12236
|
-
<span class="normal"><a href="#__codelineno-0-334">334</a></span>
|
|
12237
|
-
<span class="normal"><a href="#__codelineno-0-335">335</a></span>
|
|
12238
|
-
<span class="normal"><a href="#__codelineno-0-336">336</a></span>
|
|
12239
|
-
<span class="normal"><a href="#__codelineno-0-337">337</a></span>
|
|
12240
|
-
<span class="normal"><a href="#__codelineno-0-338">338</a></span>
|
|
12346
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-338">338</a></span>
|
|
12241
12347
|
<span class="normal"><a href="#__codelineno-0-339">339</a></span>
|
|
12242
12348
|
<span class="normal"><a href="#__codelineno-0-340">340</a></span>
|
|
12243
12349
|
<span class="normal"><a href="#__codelineno-0-341">341</a></span>
|
|
12244
12350
|
<span class="normal"><a href="#__codelineno-0-342">342</a></span>
|
|
12245
|
-
<span class="normal"><a href="#__codelineno-0-343">343</a></span
|
|
12246
|
-
<
|
|
12247
|
-
<
|
|
12248
|
-
<
|
|
12249
|
-
<
|
|
12250
|
-
<
|
|
12251
|
-
<
|
|
12252
|
-
<
|
|
12253
|
-
<
|
|
12254
|
-
<
|
|
12255
|
-
<a id="__codelineno-0-338" name="__codelineno-0-338"></a
|
|
12256
|
-
<a id="__codelineno-0-339" name="__codelineno-0-339"></a
|
|
12257
|
-
<a id="__codelineno-0-340" name="__codelineno-0-340"></a
|
|
12258
|
-
<a id="__codelineno-0-341" name="__codelineno-0-341"></a
|
|
12259
|
-
<a id="__codelineno-0-342" name="__codelineno-0-342"></a
|
|
12260
|
-
<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="
|
|
12351
|
+
<span class="normal"><a href="#__codelineno-0-343">343</a></span>
|
|
12352
|
+
<span class="normal"><a href="#__codelineno-0-344">344</a></span>
|
|
12353
|
+
<span class="normal"><a href="#__codelineno-0-345">345</a></span>
|
|
12354
|
+
<span class="normal"><a href="#__codelineno-0-346">346</a></span>
|
|
12355
|
+
<span class="normal"><a href="#__codelineno-0-347">347</a></span>
|
|
12356
|
+
<span class="normal"><a href="#__codelineno-0-348">348</a></span>
|
|
12357
|
+
<span class="normal"><a href="#__codelineno-0-349">349</a></span>
|
|
12358
|
+
<span class="normal"><a href="#__codelineno-0-350">350</a></span>
|
|
12359
|
+
<span class="normal"><a href="#__codelineno-0-351">351</a></span>
|
|
12360
|
+
<span class="normal"><a href="#__codelineno-0-352">352</a></span>
|
|
12361
|
+
<span class="normal"><a href="#__codelineno-0-353">353</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-338" name="__codelineno-0-338"></a><span class="k">def</span> <span class="nf">value_to_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
|
12362
|
+
<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12363
|
+
<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> Return a string value of this field from the passed obj.</span>
|
|
12364
|
+
<a id="__codelineno-0-341" name="__codelineno-0-341"></a><span class="sd"> This is used by the serialization framework.</span>
|
|
12365
|
+
<a id="__codelineno-0-342" name="__codelineno-0-342"></a><span class="sd"> """</span>
|
|
12366
|
+
<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
|
|
12367
|
+
<a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="n">vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">value_from_object</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
|
12368
|
+
<a id="__codelineno-0-345" name="__codelineno-0-345"></a> <span class="n">base_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_field</span>
|
|
12369
|
+
<a id="__codelineno-0-346" name="__codelineno-0-346"></a>
|
|
12370
|
+
<a id="__codelineno-0-347" name="__codelineno-0-347"></a> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">:</span>
|
|
12371
|
+
<a id="__codelineno-0-348" name="__codelineno-0-348"></a> <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
12372
|
+
<a id="__codelineno-0-349" name="__codelineno-0-349"></a> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
12373
|
+
<a id="__codelineno-0-350" name="__codelineno-0-350"></a> <span class="k">else</span><span class="p">:</span>
|
|
12374
|
+
<a id="__codelineno-0-351" name="__codelineno-0-351"></a> <span class="n">obj</span> <span class="o">=</span> <span class="n">AttributeSetter</span><span class="p">(</span><span class="n">base_field</span><span class="o">.</span><span class="n">attname</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
|
|
12375
|
+
<a id="__codelineno-0-352" name="__codelineno-0-352"></a> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">base_field</span><span class="o">.</span><span class="n">value_to_string</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span>
|
|
12376
|
+
<a id="__codelineno-0-353" name="__codelineno-0-353"></a> <span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">ensure_ascii</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
12261
12377
|
</code></pre></div></td></tr></table></div>
|
|
12262
12378
|
</details>
|
|
12263
12379
|
</div>
|
|
@@ -12521,17 +12637,7 @@ shared amongst models that requires these fields: name, color, content_types and
|
|
|
12521
12637
|
|
|
12522
12638
|
<details class="quote">
|
|
12523
12639
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12524
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12525
|
-
<span class="normal"><a href="#__codelineno-0-230">230</a></span>
|
|
12526
|
-
<span class="normal"><a href="#__codelineno-0-231">231</a></span>
|
|
12527
|
-
<span class="normal"><a href="#__codelineno-0-232">232</a></span>
|
|
12528
|
-
<span class="normal"><a href="#__codelineno-0-233">233</a></span>
|
|
12529
|
-
<span class="normal"><a href="#__codelineno-0-234">234</a></span>
|
|
12530
|
-
<span class="normal"><a href="#__codelineno-0-235">235</a></span>
|
|
12531
|
-
<span class="normal"><a href="#__codelineno-0-236">236</a></span>
|
|
12532
|
-
<span class="normal"><a href="#__codelineno-0-237">237</a></span>
|
|
12533
|
-
<span class="normal"><a href="#__codelineno-0-238">238</a></span>
|
|
12534
|
-
<span class="normal"><a href="#__codelineno-0-239">239</a></span>
|
|
12640
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-239">239</a></span>
|
|
12535
12641
|
<span class="normal"><a href="#__codelineno-0-240">240</a></span>
|
|
12536
12642
|
<span class="normal"><a href="#__codelineno-0-241">241</a></span>
|
|
12537
12643
|
<span class="normal"><a href="#__codelineno-0-242">242</a></span>
|
|
@@ -12554,40 +12660,50 @@ shared amongst models that requires these fields: name, color, content_types and
|
|
|
12554
12660
|
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
|
|
12555
12661
|
<span class="normal"><a href="#__codelineno-0-260">260</a></span>
|
|
12556
12662
|
<span class="normal"><a href="#__codelineno-0-261">261</a></span>
|
|
12557
|
-
<span class="normal"><a href="#__codelineno-0-262">262</a></span
|
|
12558
|
-
<
|
|
12559
|
-
<
|
|
12560
|
-
<
|
|
12561
|
-
<
|
|
12562
|
-
<
|
|
12563
|
-
<
|
|
12564
|
-
<
|
|
12565
|
-
<
|
|
12566
|
-
<
|
|
12567
|
-
<
|
|
12568
|
-
<a id="__codelineno-0-240" name="__codelineno-0-240"></a
|
|
12569
|
-
<a id="__codelineno-0-241" name="__codelineno-0-241"></a
|
|
12570
|
-
<a id="__codelineno-0-242" name="__codelineno-0-242"></a>
|
|
12571
|
-
<a id="__codelineno-0-243" name="__codelineno-0-243"></a>
|
|
12572
|
-
<a id="__codelineno-0-244" name="__codelineno-0-244"></a
|
|
12573
|
-
<a id="__codelineno-0-245" name="__codelineno-0-245"></a><span class="
|
|
12574
|
-
<a id="__codelineno-0-246" name="__codelineno-0-246"></a
|
|
12575
|
-
<a id="__codelineno-0-247" name="__codelineno-0-247"></a
|
|
12576
|
-
<a id="__codelineno-0-248" name="__codelineno-0-248"></a>
|
|
12577
|
-
<a id="__codelineno-0-249" name="__codelineno-0-249"></a>
|
|
12578
|
-
<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="
|
|
12579
|
-
<a id="__codelineno-0-251" name="__codelineno-0-251"></a>
|
|
12580
|
-
<a id="__codelineno-0-252" name="__codelineno-0-252"></a> <span class="
|
|
12663
|
+
<span class="normal"><a href="#__codelineno-0-262">262</a></span>
|
|
12664
|
+
<span class="normal"><a href="#__codelineno-0-263">263</a></span>
|
|
12665
|
+
<span class="normal"><a href="#__codelineno-0-264">264</a></span>
|
|
12666
|
+
<span class="normal"><a href="#__codelineno-0-265">265</a></span>
|
|
12667
|
+
<span class="normal"><a href="#__codelineno-0-266">266</a></span>
|
|
12668
|
+
<span class="normal"><a href="#__codelineno-0-267">267</a></span>
|
|
12669
|
+
<span class="normal"><a href="#__codelineno-0-268">268</a></span>
|
|
12670
|
+
<span class="normal"><a href="#__codelineno-0-269">269</a></span>
|
|
12671
|
+
<span class="normal"><a href="#__codelineno-0-270">270</a></span>
|
|
12672
|
+
<span class="normal"><a href="#__codelineno-0-271">271</a></span>
|
|
12673
|
+
<span class="normal"><a href="#__codelineno-0-272">272</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-239" name="__codelineno-0-239"></a><span class="k">class</span> <span class="nc">NaturalOrderingField</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">):</span>
|
|
12674
|
+
<a id="__codelineno-0-240" name="__codelineno-0-240"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12675
|
+
<a id="__codelineno-0-241" name="__codelineno-0-241"></a><span class="sd"> A field which stores a naturalized representation of its target field, to be used for ordering its parent model.</span>
|
|
12676
|
+
<a id="__codelineno-0-242" name="__codelineno-0-242"></a>
|
|
12677
|
+
<a id="__codelineno-0-243" name="__codelineno-0-243"></a><span class="sd"> :param target_field: Name of the field of the parent model to be naturalized</span>
|
|
12678
|
+
<a id="__codelineno-0-244" name="__codelineno-0-244"></a><span class="sd"> :param naturalize_function: The function used to generate a naturalized value (optional)</span>
|
|
12679
|
+
<a id="__codelineno-0-245" name="__codelineno-0-245"></a><span class="sd"> """</span>
|
|
12680
|
+
<a id="__codelineno-0-246" name="__codelineno-0-246"></a>
|
|
12681
|
+
<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="n">description</span> <span class="o">=</span> <span class="s2">"Stores a representation of its target field suitable for natural ordering"</span>
|
|
12682
|
+
<a id="__codelineno-0-248" name="__codelineno-0-248"></a>
|
|
12683
|
+
<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target_field</span><span class="p">,</span> <span class="n">naturalize_function</span><span class="o">=</span><span class="n">ordering</span><span class="o">.</span><span class="n">naturalize</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
12684
|
+
<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="bp">self</span><span class="o">.</span><span class="n">target_field</span> <span class="o">=</span> <span class="n">target_field</span>
|
|
12685
|
+
<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="bp">self</span><span class="o">.</span><span class="n">naturalize_function</span> <span class="o">=</span> <span class="n">naturalize_function</span>
|
|
12686
|
+
<a id="__codelineno-0-252" name="__codelineno-0-252"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
12581
12687
|
<a id="__codelineno-0-253" name="__codelineno-0-253"></a>
|
|
12582
|
-
<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="k">def</span> <span class="nf">
|
|
12583
|
-
<a id="__codelineno-0-255" name="__codelineno-0-255"></a
|
|
12584
|
-
<a id="__codelineno-0-256" name="__codelineno-0-256"></a
|
|
12585
|
-
<a id="__codelineno-0-257" name="__codelineno-0-257"></a
|
|
12586
|
-
<a id="__codelineno-0-258" name="__codelineno-0-258"></a>
|
|
12587
|
-
<a id="__codelineno-0-259" name="__codelineno-0-259"></a>
|
|
12588
|
-
<a id="__codelineno-0-260" name="__codelineno-0-260"></a>
|
|
12589
|
-
<a id="__codelineno-0-261" name="__codelineno-0-261"></a>
|
|
12590
|
-
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="
|
|
12688
|
+
<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="k">def</span> <span class="nf">pre_save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">,</span> <span class="n">add</span><span class="p">):</span>
|
|
12689
|
+
<a id="__codelineno-0-255" name="__codelineno-0-255"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12690
|
+
<a id="__codelineno-0-256" name="__codelineno-0-256"></a><span class="sd"> Generate a naturalized value from the target field</span>
|
|
12691
|
+
<a id="__codelineno-0-257" name="__codelineno-0-257"></a><span class="sd"> """</span>
|
|
12692
|
+
<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="n">original_value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">model_instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_field</span><span class="p">)</span>
|
|
12693
|
+
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="n">naturalized_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">naturalize_function</span><span class="p">(</span><span class="n">original_value</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">max_length</span><span class="p">)</span>
|
|
12694
|
+
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="nb">setattr</span><span class="p">(</span><span class="n">model_instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attname</span><span class="p">,</span> <span class="n">naturalized_value</span><span class="p">)</span>
|
|
12695
|
+
<a id="__codelineno-0-261" name="__codelineno-0-261"></a>
|
|
12696
|
+
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="k">return</span> <span class="n">naturalized_value</span>
|
|
12697
|
+
<a id="__codelineno-0-263" name="__codelineno-0-263"></a>
|
|
12698
|
+
<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="k">def</span> <span class="nf">deconstruct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
12699
|
+
<a id="__codelineno-0-265" name="__codelineno-0-265"></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">deconstruct</span><span class="p">()[</span><span class="mi">3</span><span class="p">]</span> <span class="c1"># Pass kwargs from CharField</span>
|
|
12700
|
+
<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"naturalize_function"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">naturalize_function</span>
|
|
12701
|
+
<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="k">return</span> <span class="p">(</span>
|
|
12702
|
+
<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
12703
|
+
<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="s2">"nautobot.core.models.fields.NaturalOrderingField"</span><span class="p">,</span>
|
|
12704
|
+
<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">target_field</span><span class="p">],</span>
|
|
12705
|
+
<a id="__codelineno-0-271" name="__codelineno-0-271"></a> <span class="n">kwargs</span><span class="p">,</span>
|
|
12706
|
+
<a id="__codelineno-0-272" name="__codelineno-0-272"></a> <span class="p">)</span>
|
|
12591
12707
|
</code></pre></div></td></tr></table></div>
|
|
12592
12708
|
</details>
|
|
12593
12709
|
|
|
@@ -12620,23 +12736,23 @@ shared amongst models that requires these fields: name, color, content_types and
|
|
|
12620
12736
|
|
|
12621
12737
|
<details class="quote">
|
|
12622
12738
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
12623
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
12624
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12625
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12626
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12627
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12628
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12629
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12630
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12631
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
12632
|
-
<a id="__codelineno-0-
|
|
12633
|
-
<a id="__codelineno-0-
|
|
12634
|
-
<a id="__codelineno-0-
|
|
12635
|
-
<a id="__codelineno-0-
|
|
12636
|
-
<a id="__codelineno-0-
|
|
12637
|
-
<a id="__codelineno-0-
|
|
12638
|
-
<a id="__codelineno-0-
|
|
12639
|
-
<a id="__codelineno-0-
|
|
12739
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-254">254</a></span>
|
|
12740
|
+
<span class="normal"><a href="#__codelineno-0-255">255</a></span>
|
|
12741
|
+
<span class="normal"><a href="#__codelineno-0-256">256</a></span>
|
|
12742
|
+
<span class="normal"><a href="#__codelineno-0-257">257</a></span>
|
|
12743
|
+
<span class="normal"><a href="#__codelineno-0-258">258</a></span>
|
|
12744
|
+
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
|
|
12745
|
+
<span class="normal"><a href="#__codelineno-0-260">260</a></span>
|
|
12746
|
+
<span class="normal"><a href="#__codelineno-0-261">261</a></span>
|
|
12747
|
+
<span class="normal"><a href="#__codelineno-0-262">262</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-254" name="__codelineno-0-254"></a><span class="k">def</span> <span class="nf">pre_save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model_instance</span><span class="p">,</span> <span class="n">add</span><span class="p">):</span>
|
|
12748
|
+
<a id="__codelineno-0-255" name="__codelineno-0-255"></a><span class="w"> </span><span class="sd">"""</span>
|
|
12749
|
+
<a id="__codelineno-0-256" name="__codelineno-0-256"></a><span class="sd"> Generate a naturalized value from the target field</span>
|
|
12750
|
+
<a id="__codelineno-0-257" name="__codelineno-0-257"></a><span class="sd"> """</span>
|
|
12751
|
+
<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="n">original_value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">model_instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_field</span><span class="p">)</span>
|
|
12752
|
+
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="n">naturalized_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">naturalize_function</span><span class="p">(</span><span class="n">original_value</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">max_length</span><span class="p">)</span>
|
|
12753
|
+
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="nb">setattr</span><span class="p">(</span><span class="n">model_instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attname</span><span class="p">,</span> <span class="n">naturalized_value</span><span class="p">)</span>
|
|
12754
|
+
<a id="__codelineno-0-261" name="__codelineno-0-261"></a>
|
|
12755
|
+
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="k">return</span> <span class="n">naturalized_value</span>
|
|
12640
12756
|
</code></pre></div></td></tr></table></div>
|
|
12641
12757
|
</details>
|
|
12642
12758
|
</div>
|
|
@@ -15431,17 +15547,7 @@ having to define it on the model yourself.</p>
|
|
|
15431
15547
|
|
|
15432
15548
|
<details class="quote">
|
|
15433
15549
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
15434
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
15435
|
-
<span class="normal"><a href="#__codelineno-0-374">374</a></span>
|
|
15436
|
-
<span class="normal"><a href="#__codelineno-0-375">375</a></span>
|
|
15437
|
-
<span class="normal"><a href="#__codelineno-0-376">376</a></span>
|
|
15438
|
-
<span class="normal"><a href="#__codelineno-0-377">377</a></span>
|
|
15439
|
-
<span class="normal"><a href="#__codelineno-0-378">378</a></span>
|
|
15440
|
-
<span class="normal"><a href="#__codelineno-0-379">379</a></span>
|
|
15441
|
-
<span class="normal"><a href="#__codelineno-0-380">380</a></span>
|
|
15442
|
-
<span class="normal"><a href="#__codelineno-0-381">381</a></span>
|
|
15443
|
-
<span class="normal"><a href="#__codelineno-0-382">382</a></span>
|
|
15444
|
-
<span class="normal"><a href="#__codelineno-0-383">383</a></span>
|
|
15550
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-383">383</a></span>
|
|
15445
15551
|
<span class="normal"><a href="#__codelineno-0-384">384</a></span>
|
|
15446
15552
|
<span class="normal"><a href="#__codelineno-0-385">385</a></span>
|
|
15447
15553
|
<span class="normal"><a href="#__codelineno-0-386">386</a></span>
|
|
@@ -15449,25 +15555,35 @@ having to define it on the model yourself.</p>
|
|
|
15449
15555
|
<span class="normal"><a href="#__codelineno-0-388">388</a></span>
|
|
15450
15556
|
<span class="normal"><a href="#__codelineno-0-389">389</a></span>
|
|
15451
15557
|
<span class="normal"><a href="#__codelineno-0-390">390</a></span>
|
|
15452
|
-
<span class="normal"><a href="#__codelineno-0-391">391</a></span
|
|
15453
|
-
<
|
|
15454
|
-
<
|
|
15455
|
-
<
|
|
15456
|
-
<
|
|
15457
|
-
<
|
|
15458
|
-
<
|
|
15459
|
-
<
|
|
15460
|
-
<
|
|
15461
|
-
<
|
|
15462
|
-
<a id="__codelineno-0-383" name="__codelineno-0-383"></a>
|
|
15463
|
-
<a id="__codelineno-0-384" name="__codelineno-0-384"></a
|
|
15464
|
-
<a id="__codelineno-0-385" name="__codelineno-0-385"></a>
|
|
15465
|
-
<a id="__codelineno-0-386" name="__codelineno-0-386"></a>
|
|
15466
|
-
<a id="__codelineno-0-387" name="__codelineno-0-387"></a> <span class="
|
|
15467
|
-
<a id="__codelineno-0-388" name="__codelineno-0-388"></a>
|
|
15468
|
-
<a id="__codelineno-0-389" name="__codelineno-0-389"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"
|
|
15469
|
-
<a id="__codelineno-0-390" name="__codelineno-0-390"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"
|
|
15470
|
-
<a id="__codelineno-0-391" name="__codelineno-0-391"></a> <span class="
|
|
15558
|
+
<span class="normal"><a href="#__codelineno-0-391">391</a></span>
|
|
15559
|
+
<span class="normal"><a href="#__codelineno-0-392">392</a></span>
|
|
15560
|
+
<span class="normal"><a href="#__codelineno-0-393">393</a></span>
|
|
15561
|
+
<span class="normal"><a href="#__codelineno-0-394">394</a></span>
|
|
15562
|
+
<span class="normal"><a href="#__codelineno-0-395">395</a></span>
|
|
15563
|
+
<span class="normal"><a href="#__codelineno-0-396">396</a></span>
|
|
15564
|
+
<span class="normal"><a href="#__codelineno-0-397">397</a></span>
|
|
15565
|
+
<span class="normal"><a href="#__codelineno-0-398">398</a></span>
|
|
15566
|
+
<span class="normal"><a href="#__codelineno-0-399">399</a></span>
|
|
15567
|
+
<span class="normal"><a href="#__codelineno-0-400">400</a></span>
|
|
15568
|
+
<span class="normal"><a href="#__codelineno-0-401">401</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-383" name="__codelineno-0-383"></a><span class="k">class</span> <span class="nc">TagsField</span><span class="p">(</span><span class="n">TaggableManager</span><span class="p">):</span>
|
|
15569
|
+
<a id="__codelineno-0-384" name="__codelineno-0-384"></a><span class="w"> </span><span class="sd">"""Override FormField method on taggit.managers.TaggableManager to match the Nautobot UI."""</span>
|
|
15570
|
+
<a id="__codelineno-0-385" name="__codelineno-0-385"></a>
|
|
15571
|
+
<a id="__codelineno-0-386" name="__codelineno-0-386"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
15572
|
+
<a id="__codelineno-0-387" name="__codelineno-0-387"></a> <span class="kn">from</span> <span class="nn">nautobot.extras.models.tags</span> <span class="kn">import</span> <span class="n">TaggedItem</span>
|
|
15573
|
+
<a id="__codelineno-0-388" name="__codelineno-0-388"></a>
|
|
15574
|
+
<a id="__codelineno-0-389" name="__codelineno-0-389"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"through"</span><span class="p">,</span> <span class="n">TaggedItem</span><span class="p">)</span>
|
|
15575
|
+
<a id="__codelineno-0-390" name="__codelineno-0-390"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"manager"</span><span class="p">,</span> <span class="n">TagsManager</span><span class="p">)</span>
|
|
15576
|
+
<a id="__codelineno-0-391" name="__codelineno-0-391"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"ordering"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"name"</span><span class="p">])</span>
|
|
15577
|
+
<a id="__codelineno-0-392" name="__codelineno-0-392"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
15578
|
+
<a id="__codelineno-0-393" name="__codelineno-0-393"></a>
|
|
15579
|
+
<a id="__codelineno-0-394" name="__codelineno-0-394"></a> <span class="k">def</span> <span class="nf">formfield</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">form_class</span><span class="o">=</span><span class="n">fields</span><span class="o">.</span><span class="n">DynamicModelMultipleChoiceField</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
15580
|
+
<a id="__codelineno-0-395" name="__codelineno-0-395"></a> <span class="kn">from</span> <span class="nn">nautobot.extras.models.tags</span> <span class="kn">import</span> <span class="n">Tag</span>
|
|
15581
|
+
<a id="__codelineno-0-396" name="__codelineno-0-396"></a>
|
|
15582
|
+
<a id="__codelineno-0-397" name="__codelineno-0-397"></a> <span class="n">queryset</span> <span class="o">=</span> <span class="n">Tag</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_model</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
|
|
15583
|
+
<a id="__codelineno-0-398" name="__codelineno-0-398"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"queryset"</span><span class="p">,</span> <span class="n">queryset</span><span class="p">)</span>
|
|
15584
|
+
<a id="__codelineno-0-399" name="__codelineno-0-399"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"required"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
|
15585
|
+
<a id="__codelineno-0-400" name="__codelineno-0-400"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"query_params"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"content_types"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">label_lower</span><span class="p">})</span>
|
|
15586
|
+
<a id="__codelineno-0-401" name="__codelineno-0-401"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">formfield</span><span class="p">(</span><span class="n">form_class</span><span class="o">=</span><span class="n">form_class</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
15471
15587
|
</code></pre></div></td></tr></table></div>
|
|
15472
15588
|
</details>
|
|
15473
15589
|
|
|
@@ -17432,7 +17548,8 @@ e.g:
|
|
|
17432
17548
|
|
|
17433
17549
|
<details class="quote">
|
|
17434
17550
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
17435
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
17551
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-66">66</a></span>
|
|
17552
|
+
<span class="normal"><a href="#__codelineno-0-67">67</a></span>
|
|
17436
17553
|
<span class="normal"><a href="#__codelineno-0-68">68</a></span>
|
|
17437
17554
|
<span class="normal"><a href="#__codelineno-0-69">69</a></span>
|
|
17438
17555
|
<span class="normal"><a href="#__codelineno-0-70">70</a></span>
|
|
@@ -17445,22 +17562,21 @@ e.g:
|
|
|
17445
17562
|
<span class="normal"><a href="#__codelineno-0-77">77</a></span>
|
|
17446
17563
|
<span class="normal"><a href="#__codelineno-0-78">78</a></span>
|
|
17447
17564
|
<span class="normal"><a href="#__codelineno-0-79">79</a></span>
|
|
17448
|
-
<span class="normal"><a href="#__codelineno-0-80">80</a></span>
|
|
17449
|
-
<
|
|
17450
|
-
<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="
|
|
17451
|
-
<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd">
|
|
17452
|
-
<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd">
|
|
17453
|
-
<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd">
|
|
17454
|
-
<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd">
|
|
17455
|
-
<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd">
|
|
17456
|
-
<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd">
|
|
17457
|
-
<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="
|
|
17458
|
-
<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="
|
|
17459
|
-
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="c1">#
|
|
17460
|
-
<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="
|
|
17461
|
-
<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
|
|
17462
|
-
<a id="__codelineno-0-80" name="__codelineno-0-80"></a>
|
|
17463
|
-
<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">return</span> <span class="n">slugify</span><span class="p">(</span><span class="n">content</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"-"</span><span class="p">,</span> <span class="s2">"_"</span><span class="p">)</span>
|
|
17565
|
+
<span class="normal"><a href="#__codelineno-0-80">80</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="k">def</span> <span class="nf">slugify_dashes_to_underscores</span><span class="p">(</span><span class="n">content</span><span class="p">):</span>
|
|
17566
|
+
<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="w"> </span><span class="sd">"""</span>
|
|
17567
|
+
<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> Custom slugify_function - use underscores instead of dashes; resulting slug can be used as a variable name,</span>
|
|
17568
|
+
<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> as well as a graphql safe string.</span>
|
|
17569
|
+
<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> Note: If content starts with a non graphql-safe character, e.g. a digit</span>
|
|
17570
|
+
<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> This method will prepend an "a" to content to make it graphql-safe</span>
|
|
17571
|
+
<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> e.g:</span>
|
|
17572
|
+
<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> 123 main st -> a123_main_st</span>
|
|
17573
|
+
<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> """</span>
|
|
17574
|
+
<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">graphql_safe_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">"[_A-Za-z]"</span><span class="p">)</span>
|
|
17575
|
+
<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="c1"># If the first letter of the slug is not GraphQL safe.</span>
|
|
17576
|
+
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="c1"># We append "a" to it.</span>
|
|
17577
|
+
<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">if</span> <span class="n">graphql_safe_pattern</span><span class="o">.</span><span class="n">fullmatch</span><span class="p">(</span><span class="n">content</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
17578
|
+
<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">content</span> <span class="o">=</span> <span class="s2">"a"</span> <span class="o">+</span> <span class="n">content</span>
|
|
17579
|
+
<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">return</span> <span class="n">slugify</span><span class="p">(</span><span class="n">content</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"-"</span><span class="p">,</span> <span class="s2">"_"</span><span class="p">)</span>
|
|
17464
17580
|
</code></pre></div></td></tr></table></div>
|
|
17465
17581
|
</details>
|
|
17466
17582
|
</div>
|
|
@@ -17484,11 +17600,11 @@ e.g:
|
|
|
17484
17600
|
|
|
17485
17601
|
<details class="quote">
|
|
17486
17602
|
<summary>Source code in <code>nautobot/core/models/fields.py</code></summary>
|
|
17487
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
17488
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
17489
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
17490
|
-
<a id="__codelineno-0-
|
|
17491
|
-
<a id="__codelineno-0-
|
|
17603
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-61">61</a></span>
|
|
17604
|
+
<span class="normal"><a href="#__codelineno-0-62">62</a></span>
|
|
17605
|
+
<span class="normal"><a href="#__codelineno-0-63">63</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="k">def</span> <span class="nf">slugify_dots_to_dashes</span><span class="p">(</span><span class="n">content</span><span class="p">):</span>
|
|
17606
|
+
<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">"""Custom slugify_function - convert '.' to '-' instead of removing dots outright."""</span>
|
|
17607
|
+
<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">return</span> <span class="n">slugify</span><span class="p">(</span><span class="n">content</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"."</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">))</span>
|
|
17492
17608
|
</code></pre></div></td></tr></table></div>
|
|
17493
17609
|
</details>
|
|
17494
17610
|
</div>
|