nautobot 2.1.0b1__py3-none-any.whl → 2.1.1__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.
- nautobot/__init__.py +1 -3
- nautobot/apps/__init__.py +1 -2
- nautobot/apps/admin.py +0 -1
- nautobot/apps/api.py +0 -1
- nautobot/apps/change_logging.py +0 -1
- nautobot/apps/choices.py +0 -3
- nautobot/apps/datasources.py +2 -2
- nautobot/apps/exceptions.py +0 -1
- nautobot/apps/factory.py +0 -1
- nautobot/apps/filters.py +6 -9
- nautobot/apps/forms.py +1 -2
- nautobot/apps/graphql.py +0 -1
- nautobot/apps/jobs.py +2 -1
- nautobot/apps/models.py +4 -2
- nautobot/apps/querysets.py +0 -1
- nautobot/apps/secrets.py +0 -1
- nautobot/apps/tables.py +0 -1
- nautobot/apps/testing.py +0 -1
- nautobot/apps/ui.py +1 -3
- nautobot/apps/urls.py +0 -1
- nautobot/apps/utils.py +0 -1
- nautobot/apps/views.py +0 -1
- nautobot/circuits/api/serializers.py +1 -1
- nautobot/circuits/api/urls.py +1 -1
- nautobot/circuits/api/views.py +2 -1
- nautobot/circuits/apps.py +1 -1
- nautobot/circuits/choices.py +0 -1
- nautobot/circuits/factory.py +1 -1
- nautobot/circuits/filters.py +2 -1
- nautobot/circuits/forms.py +2 -2
- nautobot/circuits/homepage.py +0 -1
- nautobot/circuits/migrations/0001_initial_part_1.py +3 -1
- nautobot/circuits/migrations/0002_initial_part_2.py +2 -1
- nautobot/circuits/migrations/0003_auto_slug.py +1 -0
- nautobot/circuits/migrations/0005_providernetwork.py +4 -2
- nautobot/circuits/migrations/0013_alter_circuittermination__path.py +1 -0
- nautobot/circuits/migrations/0014_related_name_changes.py +1 -0
- nautobot/circuits/migrations/0016_tagsfield.py +1 -0
- nautobot/circuits/migrations/0018_status_nonnullable.py +1 -0
- nautobot/circuits/models.py +2 -2
- nautobot/circuits/navigation.py +0 -1
- nautobot/circuits/signals.py +3 -2
- nautobot/circuits/tables.py +1 -0
- nautobot/circuits/tests/integration/test_relationships.py +1 -1
- nautobot/circuits/tests/test_api.py +1 -1
- nautobot/circuits/tests/test_urls.py +1 -1
- nautobot/circuits/tests/test_views.py +1 -0
- nautobot/circuits/urls.py +1 -1
- nautobot/circuits/views.py +1 -10
- nautobot/core/__init__.py +0 -1
- nautobot/core/admin.py +3 -5
- nautobot/core/api/__init__.py +0 -1
- nautobot/core/api/metadata.py +4 -6
- nautobot/core/api/pagination.py +2 -2
- nautobot/core/api/parsers.py +1 -3
- nautobot/core/api/renderers.py +0 -1
- nautobot/core/api/schema.py +2 -3
- nautobot/core/api/serializers.py +9 -7
- nautobot/core/api/urls.py +1 -5
- nautobot/core/api/utils.py +14 -15
- nautobot/core/api/versioning.py +1 -1
- nautobot/core/api/views.py +22 -91
- nautobot/core/apps/__init__.py +5 -7
- nautobot/core/authentication.py +1 -1
- nautobot/core/celery/__init__.py +1 -2
- nautobot/core/celery/control.py +0 -2
- nautobot/core/celery/encoders.py +0 -1
- nautobot/core/celery/schedulers.py +1 -2
- nautobot/core/celery/task.py +1 -1
- nautobot/core/checks.py +31 -2
- nautobot/core/choices.py +2 -2
- nautobot/core/cli/__init__.py +8 -17
- nautobot/core/context_processors.py +1 -5
- nautobot/core/factory.py +2 -2
- nautobot/core/filters.py +1 -1
- nautobot/core/forms/fields.py +2 -4
- nautobot/core/forms/forms.py +1 -1
- nautobot/core/forms/search.py +1 -1
- nautobot/core/forms/utils.py +1 -1
- nautobot/core/graphql/__init__.py +2 -3
- nautobot/core/graphql/generators.py +2 -2
- nautobot/core/graphql/schema.py +21 -8
- nautobot/core/graphql/schema_init.py +0 -1
- nautobot/core/graphql/types.py +10 -0
- nautobot/core/graphql/utils.py +1 -2
- nautobot/core/management/commands/generate_test_data.py +7 -6
- nautobot/core/management/commands/makemigrations.py +1 -1
- nautobot/core/management/commands/migrate.py +1 -1
- nautobot/core/management/commands/post_upgrade.py +1 -15
- nautobot/core/management/commands/refresh_content_type_cache.py +1 -2
- nautobot/core/management/commands/send_installation_metrics.py +2 -3
- nautobot/core/management/commands/validate_models.py +1 -1
- nautobot/core/middleware.py +2 -2
- nautobot/core/models/__init__.py +12 -12
- nautobot/core/models/fields.py +1 -1
- nautobot/core/models/generics.py +2 -3
- nautobot/core/models/managers.py +0 -1
- nautobot/core/models/name_color_content_types.py +2 -2
- nautobot/core/models/tree_queries.py +2 -4
- nautobot/core/models/validators.py +1 -1
- nautobot/core/releases.py +1 -1
- nautobot/core/runner/importer.py +2 -25
- nautobot/core/runner/runner.py +2 -2
- nautobot/core/runner/settings.py +1 -1
- nautobot/core/settings.py +15 -21
- nautobot/core/settings_funcs.py +1 -2
- nautobot/core/signals.py +0 -1
- nautobot/core/tables.py +1 -1
- nautobot/core/templates/admin/base.html +9 -9
- nautobot/core/templates/exceptions/programming_error.html +2 -2
- nautobot/core/templates/graphene/graphiql.html +9 -3
- nautobot/core/templates/home.html +26 -6
- nautobot/core/templates/inc/footer.html +0 -7
- nautobot/core/templates/inc/javascript.html +4 -2
- nautobot/core/templates/inc/media.html +2 -2
- nautobot/core/templates/inc/nav_menu.html +27 -25
- nautobot/core/templates/inc/object_details_advanced_panel.html +12 -0
- nautobot/core/templates/nautobot_config.py.j2 +4 -4
- nautobot/core/templates/utilities/theme_preview.html +883 -0
- nautobot/core/templatetags/bootstrapped_goodies_tags.py +6 -3
- nautobot/core/templatetags/buttons.py +2 -1
- nautobot/core/templatetags/helpers.py +45 -18
- nautobot/core/testing/__init__.py +1 -2
- nautobot/core/testing/api.py +2 -4
- nautobot/core/testing/filters.py +1 -1
- nautobot/core/testing/integration.py +2 -2
- nautobot/core/testing/migrations.py +1 -0
- nautobot/core/testing/mixins.py +1 -2
- nautobot/core/testing/schema.py +1 -1
- nautobot/core/testing/utils.py +3 -3
- nautobot/core/testing/views.py +8 -8
- nautobot/core/tests/integration/test_home.py +1 -1
- nautobot/core/tests/integration/test_navbar.py +2 -2
- nautobot/core/tests/integration/test_plugin_home.py +2 -1
- nautobot/core/tests/integration/test_plugin_navbar.py +6 -6
- nautobot/core/tests/nautobot_config.py +3 -3
- nautobot/core/tests/runner.py +3 -4
- nautobot/core/tests/test_api.py +6 -51
- nautobot/core/tests/test_authentication.py +2 -3
- nautobot/core/tests/test_checks.py +1 -2
- nautobot/core/tests/test_config.py +1 -1
- nautobot/core/tests/test_csv.py +4 -4
- nautobot/core/tests/test_factory.py +1 -3
- nautobot/core/tests/test_filters.py +4 -7
- nautobot/core/tests/test_forms.py +3 -6
- nautobot/core/tests/test_graphql.py +33 -17
- nautobot/core/tests/test_jinja_filters.py +5 -4
- nautobot/core/tests/test_jobs.py +1 -1
- nautobot/core/tests/test_models.py +28 -3
- nautobot/core/tests/test_navigations.py +2 -1
- nautobot/core/tests/test_openapi.py +0 -1
- nautobot/core/tests/test_paginator.py +2 -2
- nautobot/core/tests/test_releases.py +2 -2
- nautobot/core/tests/test_tables.py +1 -1
- nautobot/core/tests/test_templatetags_helpers.py +17 -2
- nautobot/core/tests/test_templatetags_netutils.py +1 -2
- nautobot/core/tests/test_utils.py +4 -8
- nautobot/core/tests/test_views.py +95 -1
- nautobot/core/tests/test_views_utils.py +0 -1
- nautobot/core/urls.py +24 -4
- nautobot/core/utils/color.py +1 -1
- nautobot/core/utils/data.py +1 -2
- nautobot/core/utils/filtering.py +4 -5
- nautobot/core/utils/git.py +6 -2
- nautobot/core/utils/logging.py +2 -1
- nautobot/core/utils/lookup.py +4 -6
- nautobot/core/utils/migrations.py +1 -0
- nautobot/core/utils/permissions.py +2 -4
- nautobot/core/utils/requests.py +10 -0
- nautobot/core/views/__init__.py +32 -8
- nautobot/core/views/generic.py +14 -13
- nautobot/core/views/mixins.py +24 -22
- nautobot/core/views/renderers.py +1 -1
- nautobot/core/views/routers.py +6 -0
- nautobot/core/views/utils.py +2 -1
- nautobot/dcim/api/urls.py +1 -1
- nautobot/dcim/api/views.py +6 -5
- nautobot/dcim/apps.py +1 -1
- nautobot/dcim/choices.py +4 -1
- nautobot/dcim/constants.py +0 -1
- nautobot/dcim/elevations.py +1 -2
- nautobot/dcim/factory.py +125 -13
- nautobot/dcim/fields.py +1 -0
- nautobot/dcim/filters/__init__.py +2 -3
- nautobot/dcim/filters/mixins.py +1 -1
- nautobot/dcim/forms.py +37 -44
- nautobot/dcim/graphql/types.py +16 -17
- nautobot/dcim/migrations/0001_initial_part_1.py +4 -2
- nautobot/dcim/migrations/0002_initial_part_2.py +2 -1
- nautobot/dcim/migrations/0003_initial_part_3.py +2 -1
- nautobot/dcim/migrations/0004_initial_part_4.py +2 -1
- nautobot/dcim/migrations/0006_auto_slug.py +1 -0
- nautobot/dcim/migrations/0009_add_natural_indexing.py +1 -0
- nautobot/dcim/migrations/0010_interface_status.py +1 -0
- nautobot/dcim/migrations/0011_interface_status_data_migration.py +1 -0
- nautobot/dcim/migrations/0013_location_location_type.py +4 -2
- nautobot/dcim/migrations/0014_location_status_data_migration.py +1 -0
- nautobot/dcim/migrations/0016_device_components__timestamp_data_migration.py +0 -1
- nautobot/dcim/migrations/0018_device_redundancy_group.py +4 -2
- nautobot/dcim/migrations/0019_device_redundancy_group_data_migration.py +1 -0
- nautobot/dcim/migrations/0022_interface_redundancy_group.py +3 -1
- nautobot/dcim/migrations/0023_interface_redundancy_group_data_migration.py +1 -0
- nautobot/dcim/migrations/0024_move_site_fields_to_location_model.py +2 -1
- nautobot/dcim/migrations/0027_alter_interface_mac_address.py +1 -0
- nautobot/dcim/migrations/0028_alter_device_and_rack_role_add_new_role.py +1 -0
- nautobot/dcim/migrations/0029_device_and_rack_roles_data_migrations.py +1 -0
- nautobot/dcim/migrations/0033_add_tree_managers_and_foreign_keys_pre_data_migration.py +1 -0
- nautobot/dcim/migrations/0034_migrate_region_and_site_data_to_locations.py +1 -2
- nautobot/dcim/migrations/0038_fixup_fks_and_related_names.py +1 -0
- nautobot/dcim/migrations/0039_related_name_changes.py +1 -0
- nautobot/dcim/migrations/0042_alter_location_managers.py +1 -0
- nautobot/dcim/migrations/0044_tagsfield.py +1 -0
- nautobot/dcim/migrations/0047_status_nonnullable.py +1 -0
- nautobot/dcim/migrations/0051_interface_redundancy_group_nullable_status.py +1 -0
- nautobot/dcim/models/cables.py +3 -3
- nautobot/dcim/models/device_component_templates.py +6 -6
- nautobot/dcim/models/devices.py +9 -4
- nautobot/dcim/models/locations.py +6 -1
- nautobot/dcim/models/power.py +1 -1
- nautobot/dcim/models/racks.py +5 -4
- nautobot/dcim/navigation.py +0 -1
- nautobot/dcim/signals.py +3 -2
- nautobot/dcim/tables/__init__.py +5 -4
- nautobot/dcim/tables/cables.py +1 -0
- nautobot/dcim/tables/devices.py +1 -0
- nautobot/dcim/tables/locations.py +1 -1
- nautobot/dcim/tables/power.py +1 -0
- nautobot/dcim/tables/racks.py +2 -1
- nautobot/dcim/templates/dcim/device/consoleports.html +2 -2
- nautobot/dcim/templates/dcim/device/consoleserverports.html +2 -2
- nautobot/dcim/templates/dcim/device/devicebays.html +1 -1
- nautobot/dcim/templates/dcim/device/frontports.html +2 -2
- nautobot/dcim/templates/dcim/device/interfaces.html +4 -4
- nautobot/dcim/templates/dcim/device/inventory.html +1 -1
- nautobot/dcim/templates/dcim/device/poweroutlets.html +2 -2
- nautobot/dcim/templates/dcim/device/powerports.html +2 -2
- nautobot/dcim/templates/dcim/device/rearports.html +2 -2
- nautobot/dcim/templates/dcim/inc/location_hierarchy.html +4 -2
- nautobot/dcim/templates/dcim/rack.html +1 -1
- nautobot/dcim/templates/dcim/rack_elevation_list.html +1 -1
- nautobot/dcim/templates/dcim/rackreservation.html +1 -1
- nautobot/dcim/tests/test_api.py +7 -7
- nautobot/dcim/tests/test_cablepaths.py +0 -1
- nautobot/dcim/tests/test_filters.py +16 -13
- nautobot/dcim/tests/test_forms.py +2 -3
- nautobot/dcim/tests/test_graphql.py +1 -0
- nautobot/dcim/tests/test_migrations.py +2 -2
- nautobot/dcim/tests/test_models.py +2 -2
- nautobot/dcim/tests/test_views.py +77 -14
- nautobot/dcim/urls.py +3 -2
- nautobot/dcim/utils.py +1 -1
- nautobot/dcim/views.py +4 -3
- nautobot/extras/admin.py +2 -1
- nautobot/extras/api/customfields.py +0 -2
- nautobot/extras/api/mixins.py +0 -1
- nautobot/extras/api/serializers.py +4 -4
- nautobot/extras/api/urls.py +1 -1
- nautobot/extras/api/views.py +1 -1
- nautobot/extras/apps.py +3 -4
- nautobot/extras/choices.py +3 -18
- nautobot/extras/context_managers.py +1 -1
- nautobot/extras/datasources/__init__.py +3 -1
- nautobot/extras/datasources/git.py +33 -12
- nautobot/extras/datasources/utils.py +0 -1
- nautobot/extras/factory.py +20 -0
- nautobot/extras/filters/__init__.py +2 -3
- nautobot/extras/filters/customfields.py +0 -1
- nautobot/extras/filters/mixins.py +1 -1
- nautobot/extras/forms/__init__.py +3 -4
- nautobot/extras/forms/base.py +1 -1
- nautobot/extras/forms/forms.py +29 -11
- nautobot/extras/forms/mixins.py +1 -1
- nautobot/extras/graphql/types.py +2 -2
- nautobot/extras/health_checks.py +1 -1
- nautobot/extras/jobs.py +43 -25
- nautobot/extras/management/__init__.py +0 -1
- nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +1 -1
- nautobot/extras/management/commands/runjob.py +3 -3
- nautobot/extras/management/commands/webhook_receiver.py +1 -2
- nautobot/extras/migrations/0001_initial_part_1.py +2 -1
- nautobot/extras/migrations/0002_initial_part_2.py +2 -1
- nautobot/extras/migrations/0003_initial_part_3.py +1 -0
- nautobot/extras/migrations/0006_graphqlquery.py +2 -1
- nautobot/extras/migrations/0007_configcontextschema.py +3 -1
- nautobot/extras/migrations/0009_computedfield.py +3 -1
- nautobot/extras/migrations/0011_fileattachment_fileproxy.py +3 -1
- nautobot/extras/migrations/0012_healthchecktestmodel.py +2 -1
- nautobot/extras/migrations/0014_auto_slug.py +1 -0
- nautobot/extras/migrations/0015_scheduled_job.py +3 -1
- nautobot/extras/migrations/0016_secret.py +4 -2
- nautobot/extras/migrations/0017_joblogentry.py +2 -1
- nautobot/extras/migrations/0018_joblog_data_migration.py +2 -1
- nautobot/extras/migrations/0021_customfield_changelog_data.py +3 -2
- nautobot/extras/migrations/0022_objectchange_object_datav2.py +1 -0
- nautobot/extras/migrations/0023_job_model.py +4 -2
- nautobot/extras/migrations/0026_job_add_gitrepository_fk.py +1 -0
- nautobot/extras/migrations/0029_dynamicgroup.py +3 -1
- nautobot/extras/migrations/0031_tag_content_types.py +1 -0
- nautobot/extras/migrations/0032_tag_content_types_data_migration.py +1 -0
- nautobot/extras/migrations/0040_dynamicgroup__dynamicgroupmembership.py +2 -1
- nautobot/extras/migrations/0041_jobresult_job_kwargs.py +1 -0
- nautobot/extras/migrations/0043_note.py +3 -1
- nautobot/extras/migrations/0044_add_job_hook.py +3 -1
- nautobot/extras/migrations/0046_populate_custom_field_slug_label.py +1 -0
- nautobot/extras/migrations/0047_enforce_custom_field_slug.py +1 -0
- nautobot/extras/migrations/0051_add_job_task_queues.py +1 -0
- nautobot/extras/migrations/0055_configcontext_dynamic_groups.py +1 -0
- nautobot/extras/migrations/0057_jobbutton.py +3 -1
- nautobot/extras/migrations/0065_configcontext_data_migrations.py +1 -0
- nautobot/extras/migrations/0067_migrate_job_result_status.py +0 -1
- nautobot/extras/migrations/0068_jobresult__add_celery_fields.py +1 -0
- nautobot/extras/migrations/0071_replace_related_names.py +1 -0
- nautobot/extras/migrations/0077_migrate_custom_field_data.py +1 -0
- nautobot/extras/migrations/0078_remove_name_field_and_make_label_field_non_nullable.py +1 -0
- nautobot/extras/migrations/0080_tagsfield.py +1 -0
- nautobot/extras/migrations/0082_rename_relationship_name_to_label.py +1 -0
- nautobot/extras/migrations/0083_ensure_relationship_keys_are_unique.py +1 -0
- nautobot/extras/migrations/0090_joblogentry__log_level_data_migration.py +0 -1
- nautobot/extras/migrations/0095_ensure_note_timestamps_are_unique.py +4 -5
- nautobot/extras/migrations/0097_alter_job_result_remove_result.py +1 -0
- nautobot/extras/migrations/0100_fileproxy_job_result.py +1 -0
- nautobot/extras/migrations/0101_externalintegration.py +9 -1
- nautobot/extras/models/__init__.py +2 -3
- nautobot/extras/models/change_logging.py +0 -1
- nautobot/extras/models/customfields.py +13 -4
- nautobot/extras/models/datasources.py +2 -2
- nautobot/extras/models/groups.py +3 -4
- nautobot/extras/models/jobs.py +13 -7
- nautobot/extras/models/models.py +61 -24
- nautobot/extras/models/relationships.py +8 -4
- nautobot/extras/models/roles.py +1 -1
- nautobot/extras/models/secrets.py +1 -3
- nautobot/extras/models/tags.py +0 -1
- nautobot/extras/navigation.py +0 -1
- nautobot/extras/plugins/__init__.py +6 -7
- nautobot/extras/plugins/tables.py +1 -2
- nautobot/extras/plugins/utils.py +1 -1
- nautobot/extras/plugins/views.py +21 -21
- nautobot/extras/querysets.py +30 -13
- nautobot/extras/signals.py +6 -7
- nautobot/extras/tables.py +13 -5
- nautobot/extras/tasks.py +1 -2
- nautobot/extras/templates/extras/configcontext_edit.html +1 -1
- nautobot/extras/templates/extras/customfield_edit.html +7 -12
- nautobot/extras/templates/extras/dynamicgroup_edit.html +42 -47
- nautobot/extras/templates/extras/externalintegration_retrieve.html +12 -0
- nautobot/extras/templates/extras/externalintegration_update.html +28 -0
- nautobot/extras/templates/extras/gitrepository_result.html +2 -2
- nautobot/extras/templates/extras/graphqlquery.html +4 -2
- nautobot/extras/templates/extras/inc/jobresult_js.html +1 -1
- nautobot/extras/templates/extras/job_list.html +1 -1
- nautobot/extras/templates/extras/jobresult.html +2 -2
- nautobot/extras/templates/extras/secretsgroup_edit.html +40 -45
- nautobot/extras/templatetags/custom_links.py +2 -3
- nautobot/extras/templatetags/job_buttons.py +76 -83
- nautobot/extras/templatetags/log_levels.py +0 -1
- nautobot/extras/templatetags/plugins.py +1 -1
- nautobot/extras/test_jobs/api_test_job.py +1 -2
- nautobot/extras/test_jobs/atomic_transaction.py +1 -2
- nautobot/extras/test_jobs/dry_run.py +1 -2
- nautobot/extras/test_jobs/fail.py +1 -2
- nautobot/extras/test_jobs/field_order.py +1 -1
- nautobot/extras/test_jobs/file_upload_fail.py +1 -2
- nautobot/extras/test_jobs/file_upload_pass.py +1 -2
- nautobot/extras/test_jobs/has_sensitive_variables.py +1 -2
- nautobot/extras/test_jobs/ipaddress_vars.py +1 -4
- nautobot/extras/test_jobs/job_button_receiver.py +1 -2
- nautobot/extras/test_jobs/job_hook_receiver.py +1 -2
- nautobot/extras/test_jobs/job_variables.py +7 -2
- nautobot/extras/test_jobs/location_with_custom_field.py +1 -2
- nautobot/extras/test_jobs/log_redaction.py +1 -2
- nautobot/extras/test_jobs/log_skip_db_logging.py +1 -2
- nautobot/extras/test_jobs/modify_db.py +1 -2
- nautobot/extras/test_jobs/object_var_optional.py +1 -2
- nautobot/extras/test_jobs/object_var_required.py +1 -2
- nautobot/extras/test_jobs/object_vars.py +1 -2
- nautobot/extras/test_jobs/pass.py +1 -2
- nautobot/extras/test_jobs/profiling.py +1 -2
- nautobot/extras/tests/integration/__init__.py +1 -1
- nautobot/extras/tests/integration/test_computedfields.py +2 -2
- nautobot/extras/tests/integration/test_configcontextschema.py +5 -5
- nautobot/extras/tests/integration/test_plugins.py +5 -4
- nautobot/extras/tests/integration/test_tagfilter.py +1 -1
- nautobot/extras/tests/test_api.py +15 -9
- nautobot/extras/tests/test_changelog.py +3 -2
- nautobot/extras/tests/test_context_managers.py +6 -3
- nautobot/extras/tests/test_customfields.py +4 -4
- nautobot/extras/tests/test_datasources.py +1 -1
- nautobot/extras/tests/test_dynamicgroups.py +3 -3
- nautobot/extras/tests/test_filters.py +3 -2
- nautobot/extras/tests/test_forms.py +5 -6
- nautobot/extras/tests/test_git.py +1 -1
- nautobot/extras/tests/test_job_variables.py +20 -1
- nautobot/extras/tests/test_jobs.py +34 -5
- nautobot/extras/tests/test_models.py +156 -6
- nautobot/extras/tests/test_notes.py +0 -1
- nautobot/extras/tests/test_plugins.py +71 -9
- nautobot/extras/tests/test_relationships.py +3 -3
- nautobot/extras/tests/test_tags.py +1 -1
- nautobot/extras/tests/test_views.py +105 -25
- nautobot/extras/tests/test_webhooks.py +4 -5
- nautobot/extras/urls.py +0 -2
- nautobot/extras/utils.py +11 -9
- nautobot/extras/views.py +42 -44
- nautobot/generate_secret_key.py +10 -5
- nautobot/ipam/api/serializers.py +1 -2
- nautobot/ipam/api/urls.py +1 -1
- nautobot/ipam/api/views.py +1 -0
- nautobot/ipam/apps.py +2 -1
- nautobot/ipam/factory.py +6 -9
- nautobot/ipam/fields.py +1 -1
- nautobot/ipam/filters.py +42 -58
- nautobot/ipam/formfields.py +1 -2
- nautobot/ipam/forms.py +5 -4
- nautobot/ipam/graphql/types.py +1 -1
- nautobot/ipam/homepage.py +0 -1
- nautobot/ipam/lookups.py +2 -3
- nautobot/ipam/migrations/0002_initial_part_2.py +2 -1
- nautobot/ipam/migrations/0003_remove_max_length.py +1 -0
- nautobot/ipam/migrations/0004_fixup_p2p_broadcast.py +0 -1
- nautobot/ipam/migrations/0005_auto_slug.py +1 -0
- nautobot/ipam/migrations/0010_alter_ipam_role_add_new_role.py +1 -0
- nautobot/ipam/migrations/0011_migrate_ipam_role_data.py +1 -0
- nautobot/ipam/migrations/0020_related_name_changes.py +1 -0
- nautobot/ipam/migrations/0022_aggregate_to_prefix_data_migration.py +1 -2
- nautobot/ipam/migrations/0024_interface_to_ipaddress_m2m.py +2 -1
- nautobot/ipam/migrations/0025_interface_ipaddress_m2m_data_migration.py +15 -13
- nautobot/ipam/migrations/0028_tagsfield.py +1 -0
- nautobot/ipam/migrations/0030_ipam__namespaces.py +3 -1
- nautobot/ipam/migrations/0034_status_nonnullable.py +1 -0
- nautobot/ipam/migrations/0037_data_migration_vlan_group_name_uniqueness.py +0 -1
- nautobot/ipam/migrations/0039_alter_ipaddresstointerface_ip_address.py +20 -0
- nautobot/ipam/models.py +11 -8
- nautobot/ipam/navigation.py +0 -1
- nautobot/ipam/querysets.py +48 -49
- nautobot/ipam/tables.py +11 -2
- nautobot/ipam/templates/ipam/ipaddress.html +30 -6
- nautobot/ipam/templates/ipam/ipaddress_interfaces.html +3 -3
- nautobot/ipam/templates/ipam/ipaddress_vm_interfaces.html +32 -0
- nautobot/ipam/tests/test_api.py +2 -2
- nautobot/ipam/tests/test_filters.py +13 -17
- nautobot/ipam/tests/test_migrations.py +1 -2
- nautobot/ipam/tests/test_models.py +17 -2
- nautobot/ipam/tests/test_ordering.py +1 -1
- nautobot/ipam/tests/test_querysets.py +2 -2
- nautobot/ipam/tests/test_views.py +6 -6
- nautobot/ipam/urls.py +6 -0
- nautobot/ipam/utils/migrations.py +0 -1
- nautobot/ipam/views.py +26 -6
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css +142 -142
- 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 +307 -307
- 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 +59 -30
- nautobot/project-static/css/dark.css +38 -31
- nautobot/project-static/docs/404.html +17 -87
- nautobot/project-static/docs/apps/index.html +17 -87
- nautobot/project-static/docs/apps/nautobot-apps.html +17 -87
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +405 -475
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +28 -98
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2334 -2396
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +17 -87
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +132 -202
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +17 -87
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +155 -87
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +17 -87
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +17 -87
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +42 -112
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +1028 -1098
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +186 -256
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +1454 -1156
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +1443 -1507
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +157 -203
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +17 -87
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +32 -102
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +3822 -3888
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +990 -1060
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +65 -123
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +1431 -1495
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +3618 -3640
- nautobot/project-static/docs/development/apps/api/configuration-view.html +17 -87
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +19 -89
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +17 -87
- nautobot/project-static/docs/development/apps/api/models/global-search.html +17 -87
- nautobot/project-static/docs/development/apps/api/models/graphql.html +17 -87
- nautobot/project-static/docs/development/apps/api/models/index.html +17 -87
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +17 -87
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +17 -87
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +19 -89
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +19 -89
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +19 -89
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +17 -87
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +17 -87
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +21 -87
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +17 -87
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +17 -87
- nautobot/project-static/docs/development/apps/api/prometheus.html +17 -87
- nautobot/project-static/docs/development/apps/api/setup.html +17 -87
- nautobot/project-static/docs/development/apps/api/testing.html +20 -90
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +17 -87
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +17 -87
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +17 -87
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +19 -89
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +209 -140
- nautobot/project-static/docs/development/apps/api/ui-extensions/tabs.html +13 -5390
- nautobot/project-static/docs/development/apps/api/views/base-template.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +22 -92
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/index.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/notes.html +19 -89
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/urls.html +17 -87
- nautobot/project-static/docs/development/apps/api/views/view-overrides.html +13 -5385
- nautobot/project-static/docs/development/apps/index.html +17 -87
- nautobot/project-static/docs/development/apps/migration/code-updates.html +17 -87
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +17 -87
- nautobot/project-static/docs/development/apps/migration/from-v1.html +17 -88
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +17 -87
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +17 -87
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +17 -87
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +17 -87
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +17 -87
- nautobot/project-static/docs/development/core/application-registry.html +20 -90
- nautobot/project-static/docs/development/core/best-practices.html +20 -90
- nautobot/project-static/docs/development/core/bootstrap-ui.html +5360 -0
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +17 -87
- nautobot/project-static/docs/development/core/extending-models.html +21 -87
- nautobot/project-static/docs/development/core/generic-views.html +17 -87
- nautobot/project-static/docs/development/core/getting-started.html +124 -301
- nautobot/project-static/docs/development/core/homepage.html +17 -87
- nautobot/project-static/docs/development/core/index.html +17 -87
- nautobot/project-static/docs/development/core/model-features.html +17 -87
- nautobot/project-static/docs/development/core/natural-keys.html +17 -87
- nautobot/project-static/docs/development/core/navigation-menu.html +17 -87
- nautobot/project-static/docs/development/core/react-ui.html +13 -5668
- nautobot/project-static/docs/development/core/release-checklist.html +20 -96
- nautobot/project-static/docs/development/core/role-internals.html +20 -90
- nautobot/project-static/docs/development/core/style-guide.html +77 -146
- nautobot/project-static/docs/development/core/templates.html +20 -90
- nautobot/project-static/docs/development/core/testing.html +17 -87
- nautobot/project-static/docs/development/core/user-preferences.html +17 -87
- nautobot/project-static/docs/development/index.html +17 -87
- nautobot/project-static/docs/development/jobs/index.html +424 -425
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +75 -98
- nautobot/project-static/docs/development/react-ui.html +3 -3
- nautobot/project-static/docs/img/relationship_w_json_filter.png +0 -0
- nautobot/project-static/docs/index.html +90 -93
- nautobot/project-static/docs/media/admin_ui_run_permission.png +0 -0
- nautobot/project-static/docs/media/development/homepage_changelog_panel.png +0 -0
- nautobot/project-static/docs/media/development/homepage_dcim_panel.png +0 -0
- nautobot/project-static/docs/media/installation/nautobot_ui_admin.png +0 -0
- nautobot/project-static/docs/media/installation/nautobot_ui_login.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_filtering_01.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_01.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_02.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_03.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_04.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_05.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_01.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_02.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_03.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_04.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_05.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_06.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_07.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_basic_01.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_basic_02.png +0 -0
- nautobot/project-static/docs/media/models/dynamicgroup_workflow_basic_03.png +0 -0
- nautobot/project-static/docs/media/models/jobbutton_form.png +0 -0
- nautobot/project-static/docs/media/models/site_jobbuttons.png +0 -0
- nautobot/project-static/docs/media/plugins/plugin_admin_config.png +0 -0
- nautobot/project-static/docs/media/plugins/plugin_admin_ui.png +0 -0
- nautobot/project-static/docs/media/ss_config_contexts.png +0 -0
- nautobot/project-static/docs/media/ss_graphiql.png +0 -0
- nautobot/project-static/docs/media/ss_main_page.png +0 -0
- nautobot/project-static/docs/media/ss_plugin_chatops.png +0 -0
- nautobot/project-static/docs/media/ss_plugin_golden_config.png +0 -0
- nautobot/project-static/docs/media/ss_prefix_hierarchy.png +0 -0
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/release-notes/index.html +17 -87
- nautobot/project-static/docs/release-notes/version-1.0.html +17 -87
- nautobot/project-static/docs/release-notes/version-1.1.html +17 -87
- nautobot/project-static/docs/release-notes/version-1.2.html +17 -87
- nautobot/project-static/docs/release-notes/version-1.3.html +17 -87
- nautobot/project-static/docs/release-notes/version-1.4.html +18 -88
- nautobot/project-static/docs/release-notes/version-1.5.html +17 -87
- nautobot/project-static/docs/release-notes/version-1.6.html +17 -87
- nautobot/project-static/docs/release-notes/version-2.0.html +467 -336
- nautobot/project-static/docs/release-notes/version-2.1.html +470 -108
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +240 -255
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +17 -87
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +20 -90
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +17 -87
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +17 -87
- nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +13 -5417
- nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +47 -113
- nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +17 -87
- nautobot/project-static/docs/user-guide/administration/guides/caching.html +17 -87
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +17 -87
- nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +17 -87
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +17 -87
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +17 -87
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +17 -87
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +17 -87
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +17 -87
- nautobot/project-static/docs/user-guide/administration/installation/docker.html +17 -87
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +17 -87
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +17 -87
- nautobot/project-static/docs/user-guide/administration/installation/index.html +22 -109
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +18 -101
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +23 -140
- nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +17 -87
- nautobot/project-static/docs/user-guide/administration/installation/services.html +17 -87
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +17 -87
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +17 -87
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +92 -181
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +18 -88
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +17 -87
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +23 -89
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +18 -88
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/media/ipam_namespace_documentation.drawio +259 -1
- nautobot/project-static/docs/user-guide/core-data-model/ipam/media/ipam_namespace_documentation.drawio.png +0 -0
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +18 -88
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +17 -87
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +17 -87
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +17 -87
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +23 -93
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +17 -87
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +17 -87
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +26 -96
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +35 -103
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +19 -89
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +19 -91
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +19 -89
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +24 -94
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +39 -258
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +45 -243
- nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_choices.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_detail_grouped.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_detail_label.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_edit.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_select.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/1-create-location-type.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/10-add-platform.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/11-platforms-page.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/15-create-device-type.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/16-interface-templates.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/17-templated-interfaces.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/18-assign-device-type.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/19-edit-ints-for-lag.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/2-create-manufacturer.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/20-ints-int-lag.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/21-device-type.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/27-add-rir.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/3-create-role.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/30-add-prefix.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/32-add-ip-addr.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/33-assign-address.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/34-assign-address-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/35-assign-address-3.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/36-verify-address.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/37-verify-prefix.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/38-verify-prefix2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/4-create-device-type.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/41-device-search-results.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/42-address-search-v2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/43-get-to-device-main-page.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/44-add-platform.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/5-create-device.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/6-create-location.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/7-location-type-page.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/8-location-page.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/01-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/02-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/03-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/04-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/05-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/06-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/07-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/08-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/09-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/10-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/11-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/12-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/13-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/14-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/15-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/16-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/17-git-data-source.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/00-graphiql.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/01-graphiql-explorer.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/02-graphiql-explorer-device-query.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/03-graphiql-explorer-device-attributes.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/04-graphql-query-01.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/05-graphiql-autocomplete.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/06-graphql-query-02.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/07-graphql-query-03.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/08-graphql-query-04.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/09-graphql-query-05.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/10-graphql-swagger.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/graphql/11-graphql-query-06.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/ip_merge_button.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/merge_button.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/merge_view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/no_more_dup_ips.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/skip_button.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/unselect_ips.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/01-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/02-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/03-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/04-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/05-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/06-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/07-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/08-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/09-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/10-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/relationships/11-relationships.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +20 -90
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +22 -92
- nautobot/project-static/docs/user-guide/index.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +22 -88
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +68 -87
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +18 -88
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +22 -88
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +18 -88
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +43 -91
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +21 -87
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +17 -87
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +17 -87
- nautobot/project-static/js/homepage_layout.js +170 -0
- nautobot/project-static/js/theme.js +0 -5
- nautobot/tenancy/api/urls.py +1 -1
- nautobot/tenancy/api/views.py +1 -0
- nautobot/tenancy/factory.py +2 -2
- nautobot/tenancy/filters/__init__.py +1 -2
- nautobot/tenancy/forms.py +2 -2
- nautobot/tenancy/homepage.py +0 -1
- nautobot/tenancy/migrations/0001_initial.py +2 -1
- nautobot/tenancy/migrations/0002_auto_slug.py +1 -0
- nautobot/tenancy/migrations/0004_change_tree_manager_on_tree_models.py +1 -0
- nautobot/tenancy/migrations/0008_tagsfield.py +1 -0
- nautobot/tenancy/models.py +0 -1
- nautobot/tenancy/navigation.py +0 -1
- nautobot/tenancy/tables.py +1 -0
- nautobot/tenancy/templates/tenancy/tenantgroup.html +1 -1
- nautobot/tenancy/tests/test_filters.py +5 -5
- nautobot/tenancy/urls.py +1 -0
- nautobot/tenancy/views.py +2 -2
- nautobot/users/admin.py +1 -2
- nautobot/users/api/urls.py +1 -1
- nautobot/users/api/views.py +6 -4
- nautobot/users/factory.py +8 -24
- nautobot/users/filters.py +4 -4
- nautobot/users/forms.py +1 -0
- nautobot/users/migrations/0004_alter_user_managers.py +1 -0
- nautobot/users/migrations/0008_make_object_permission_a_changelogged_model.py +22 -0
- nautobot/users/models.py +2 -2
- nautobot/users/tests/test_api.py +7 -6
- nautobot/users/tests/test_filters.py +0 -1
- nautobot/users/tests/test_models.py +0 -1
- nautobot/users/tests/test_password_ui.py +1 -1
- nautobot/users/views.py +5 -4
- nautobot/virtualization/api/urls.py +1 -1
- nautobot/virtualization/api/views.py +2 -1
- nautobot/virtualization/apps.py +1 -1
- nautobot/virtualization/choices.py +0 -1
- nautobot/virtualization/factory.py +1 -1
- nautobot/virtualization/filters.py +1 -1
- nautobot/virtualization/forms.py +6 -6
- nautobot/virtualization/homepage.py +0 -1
- nautobot/virtualization/migrations/0003_vminterface_verbose_name.py +1 -0
- nautobot/virtualization/migrations/0004_auto_slug.py +1 -0
- nautobot/virtualization/migrations/0005_add_natural_indexing.py +1 -0
- nautobot/virtualization/migrations/0006_vminterface_status.py +1 -0
- nautobot/virtualization/migrations/0007_vminterface_status_data_migration.py +1 -0
- nautobot/virtualization/migrations/0011_alter_vminterface_mac_address.py +1 -0
- nautobot/virtualization/migrations/0012_alter_virtualmachine_role_add_new_role.py +1 -0
- nautobot/virtualization/migrations/0013_migrate_virtualmachine_role_data.py +1 -0
- nautobot/virtualization/migrations/0018_related_name_changes.py +1 -0
- nautobot/virtualization/migrations/0021_tagsfield_and_vminterface_to_primarymodel.py +1 -0
- nautobot/virtualization/migrations/0025_status_nonnullable.py +1 -0
- nautobot/virtualization/models.py +1 -2
- nautobot/virtualization/navigation.py +0 -1
- nautobot/virtualization/signals.py +0 -1
- nautobot/virtualization/tables.py +1 -0
- nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -2
- nautobot/virtualization/tests/test_filters.py +3 -3
- nautobot/virtualization/tests/test_models.py +1 -1
- nautobot/virtualization/tests/test_views.py +2 -2
- nautobot/virtualization/urls.py +1 -0
- nautobot/virtualization/views.py +1 -1
- {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/METADATA +10 -2
- {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/RECORD +895 -993
- nautobot/core/management/commands/build_ui.py +0 -281
- nautobot/core/templates/base_react.html +0 -55
- nautobot/core/tests/test_cli.py +0 -25
- nautobot/project-static/docs/media/installation/nautobot_ui_guest.png +0 -0
- nautobot/project-static/docs/user-guide/core-data-model/ipam/media/ipam_namespace_documentation.drawio.svg +0 -4
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/39-address-search.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/40-addr-main-page.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/18-git-data-source.png +0 -0
- nautobot/ui/.eslintignore +0 -3
- nautobot/ui/.gitignore +0 -7
- nautobot/ui/.prettierignore +0 -6
- nautobot/ui/.prettierrc +0 -4
- nautobot/ui/README.md +0 -27
- nautobot/ui/config/env.js +0 -102
- nautobot/ui/config/getHttpsConfig.js +0 -68
- nautobot/ui/config/jest/babelTransform.js +0 -14
- nautobot/ui/config/jest/cssTransform.js +0 -12
- nautobot/ui/config/jest/fileTransform.js +0 -38
- nautobot/ui/config/modules.js +0 -151
- nautobot/ui/config/paths.js +0 -67
- nautobot/ui/config/webpack/persistentCache/createEnvironmentHash.js +0 -8
- nautobot/ui/config/webpack.config.js +0 -674
- nautobot/ui/config/webpackDevServer.config.js +0 -127
- nautobot/ui/jest.config.js +0 -35
- nautobot/ui/jsconfig.json +0 -4
- nautobot/ui/package-lock.json +0 -22947
- nautobot/ui/package.json +0 -119
- nautobot/ui/public/index.html +0 -47
- nautobot/ui/public/logo192.png +0 -0
- nautobot/ui/public/logo512.png +0 -0
- nautobot/ui/public/manifest.json +0 -25
- nautobot/ui/public/nautobot_logo.svg +0 -131
- nautobot/ui/public/robots.txt +0 -3
- nautobot/ui/scripts/build.js +0 -224
- nautobot/ui/scripts/start.js +0 -140
- nautobot/ui/scripts/test.js +0 -40
- nautobot/ui/src/App.js +0 -79
- nautobot/ui/src/components/AppFullWidthComponents.js +0 -8
- nautobot/ui/src/components/AppTab.js +0 -40
- nautobot/ui/src/components/Apps.js +0 -60
- nautobot/ui/src/components/FeedbackModal.js +0 -123
- nautobot/ui/src/components/FiltersPanel.js +0 -693
- nautobot/ui/src/components/HomeChangelogPanel.js +0 -98
- nautobot/ui/src/components/HomePanel.js +0 -58
- nautobot/ui/src/components/JobHistoryTable.js +0 -78
- nautobot/ui/src/components/Layout.js +0 -76
- nautobot/ui/src/components/LoadingWidget.js +0 -14
- nautobot/ui/src/components/Navbar.js +0 -204
- nautobot/ui/src/components/NotificationPopover.js +0 -27
- nautobot/ui/src/components/ObjectTable/ObjectListTable.js +0 -300
- nautobot/ui/src/components/ObjectTable/ObjectTable.js +0 -96
- nautobot/ui/src/components/ObjectTable/ObjectTableItem.js +0 -70
- nautobot/ui/src/components/ObjectTable/index.js +0 -3
- nautobot/ui/src/components/Pagination/PageNumberForm.js +0 -228
- nautobot/ui/src/components/Pagination/PageSizeForm.js +0 -65
- nautobot/ui/src/components/Pagination/Pagination.js +0 -67
- nautobot/ui/src/components/Pagination/index.js +0 -3
- nautobot/ui/src/components/ReferenceDataTag.js +0 -35
- nautobot/ui/src/components/Retrieve/RenderChangeLogsTab.js +0 -58
- nautobot/ui/src/components/Retrieve/RenderColumn.js +0 -30
- nautobot/ui/src/components/Retrieve/RenderGroup.js +0 -24
- nautobot/ui/src/components/Retrieve/RenderHeader.js +0 -125
- nautobot/ui/src/components/Retrieve/RenderNotesTab.js +0 -60
- nautobot/ui/src/components/Retrieve/RenderTable.js +0 -33
- nautobot/ui/src/components/Retrieve/RenderTabs.js +0 -56
- nautobot/ui/src/components/Retrieve/index.js +0 -7
- nautobot/ui/src/components/RouterButton.js +0 -10
- nautobot/ui/src/components/RouterLink.js +0 -10
- nautobot/ui/src/components/SidebarNav.js +0 -156
- nautobot/ui/src/components/__tests__/AppFullWidthComponents.test.js +0 -16
- nautobot/ui/src/components/__tests__/AppTab.test.js +0 -21
- nautobot/ui/src/components/__tests__/Apps.test.js +0 -14
- nautobot/ui/src/components/__tests__/Layout.test.js +0 -33
- nautobot/ui/src/components/__tests__/PageSizeForm.test.js +0 -13
- nautobot/ui/src/components/__tests__/Pagination.test.js +0 -43
- nautobot/ui/src/components/__tests__/Table.test.js +0 -39
- nautobot/ui/src/components/__tests__/TableItem.test.js +0 -39
- nautobot/ui/src/components/index.js +0 -4
- nautobot/ui/src/constants/apiPath.js +0 -13
- nautobot/ui/src/constants/icons.js +0 -15
- nautobot/ui/src/constants/size.js +0 -15
- nautobot/ui/src/file_templates/app_imports.js.j2 +0 -7
- nautobot/ui/src/file_templates/jsconfig-base.json +0 -12
- nautobot/ui/src/index.js +0 -65
- nautobot/ui/src/reportWebVitals.js +0 -15
- nautobot/ui/src/router.js +0 -77
- nautobot/ui/src/utils/api.js +0 -160
- nautobot/ui/src/utils/app-import.js +0 -15
- nautobot/ui/src/utils/color.js +0 -15
- nautobot/ui/src/utils/date.js +0 -14
- nautobot/ui/src/utils/index.js +0 -15
- nautobot/ui/src/utils/navigation.js +0 -48
- nautobot/ui/src/utils/session.js +0 -64
- nautobot/ui/src/utils/store.js +0 -242
- nautobot/ui/src/utils/string.js +0 -6
- nautobot/ui/src/utils/url.js +0 -4
- nautobot/ui/src/views/Home.js +0 -142
- nautobot/ui/src/views/InstalledApps.js +0 -80
- nautobot/ui/src/views/Login.js +0 -48
- nautobot/ui/src/views/Logout.js +0 -20
- nautobot/ui/src/views/__tests__/BSCreateViewTemplate.test.js +0 -11
- nautobot/ui/src/views/__tests__/BSListViewTemplate.test.js +0 -107
- nautobot/ui/src/views/__tests__/Login.test.js +0 -15
- nautobot/ui/src/views/generic/GenericView.js +0 -191
- nautobot/ui/src/views/generic/ObjectCreate.js +0 -96
- nautobot/ui/src/views/generic/ObjectList.js +0 -137
- nautobot/ui/src/views/generic/ObjectRetrieve.js +0 -87
- {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/WHEEL +0 -0
- {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/entry_points.txt +0 -0
|
@@ -977,20 +977,6 @@
|
|
|
977
977
|
|
|
978
978
|
|
|
979
979
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
<li class="md-nav__item">
|
|
986
|
-
<a href="../../../user-guide/administration/configuration/node-configuration.html" class="md-nav__link">
|
|
987
|
-
Node.js Configuration
|
|
988
|
-
</a>
|
|
989
|
-
</li>
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
980
|
</ul>
|
|
995
981
|
</nav>
|
|
996
982
|
</li>
|
|
@@ -1439,34 +1425,6 @@
|
|
|
1439
1425
|
|
|
1440
1426
|
|
|
1441
1427
|
|
|
1442
|
-
<li class="md-nav__item">
|
|
1443
|
-
<a href="../../../user-guide/feature-guides/git-data-source.html" class="md-nav__link">
|
|
1444
|
-
Git as a Data Source
|
|
1445
|
-
</a>
|
|
1446
|
-
</li>
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
<li class="md-nav__item">
|
|
1457
|
-
<a href="../../../user-guide/feature-guides/graphql.html" class="md-nav__link">
|
|
1458
|
-
GraphQL
|
|
1459
|
-
</a>
|
|
1460
|
-
</li>
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
1428
|
<li class="md-nav__item">
|
|
1471
1429
|
<a href="../../../user-guide/feature-guides/relationships.html" class="md-nav__link">
|
|
1472
1430
|
Relationships
|
|
@@ -3556,23 +3514,9 @@
|
|
|
3556
3514
|
|
|
3557
3515
|
|
|
3558
3516
|
|
|
3559
|
-
<li class="md-nav__item">
|
|
3560
|
-
<a href="../../../development/apps/api/views/view-overrides.html" class="md-nav__link">
|
|
3561
|
-
View Overrides
|
|
3562
|
-
</a>
|
|
3563
|
-
</li>
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
|
|
3570
|
-
|
|
3571
|
-
|
|
3572
|
-
|
|
3573
3517
|
<li class="md-nav__item">
|
|
3574
3518
|
<a href="../../../development/apps/api/views/core-view-overrides.html" class="md-nav__link">
|
|
3575
|
-
|
|
3519
|
+
View Overrides
|
|
3576
3520
|
</a>
|
|
3577
3521
|
</li>
|
|
3578
3522
|
|
|
@@ -3661,7 +3605,7 @@
|
|
|
3661
3605
|
|
|
3662
3606
|
<li class="md-nav__item">
|
|
3663
3607
|
<a href="../../../development/apps/api/platform-features/filter-extensions.html" class="md-nav__link">
|
|
3664
|
-
Filter
|
|
3608
|
+
Filter Extensions
|
|
3665
3609
|
</a>
|
|
3666
3610
|
</li>
|
|
3667
3611
|
|
|
@@ -3869,21 +3813,7 @@
|
|
|
3869
3813
|
|
|
3870
3814
|
<li class="md-nav__item">
|
|
3871
3815
|
<a href="../../../development/apps/api/ui-extensions/object-detail-views.html" class="md-nav__link">
|
|
3872
|
-
Object Detail Views
|
|
3873
|
-
</a>
|
|
3874
|
-
</li>
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3884
|
-
<li class="md-nav__item">
|
|
3885
|
-
<a href="../../../development/apps/api/ui-extensions/tabs.html" class="md-nav__link">
|
|
3886
|
-
Tabs
|
|
3816
|
+
Object Detail Views and Tabs
|
|
3887
3817
|
</a>
|
|
3888
3818
|
</li>
|
|
3889
3819
|
|
|
@@ -5290,6 +5220,20 @@
|
|
|
5290
5220
|
|
|
5291
5221
|
|
|
5292
5222
|
|
|
5223
|
+
<li class="md-nav__item">
|
|
5224
|
+
<a href="../../../development/core/bootstrap-ui.html" class="md-nav__link">
|
|
5225
|
+
Bootstrap UI
|
|
5226
|
+
</a>
|
|
5227
|
+
</li>
|
|
5228
|
+
|
|
5229
|
+
|
|
5230
|
+
|
|
5231
|
+
|
|
5232
|
+
|
|
5233
|
+
|
|
5234
|
+
|
|
5235
|
+
|
|
5236
|
+
|
|
5293
5237
|
<li class="md-nav__item">
|
|
5294
5238
|
<a href="../../../development/core/best-practices.html" class="md-nav__link">
|
|
5295
5239
|
Best Practices
|
|
@@ -5402,20 +5346,6 @@
|
|
|
5402
5346
|
|
|
5403
5347
|
|
|
5404
5348
|
|
|
5405
|
-
<li class="md-nav__item">
|
|
5406
|
-
<a href="../../../development/core/react-ui.html" class="md-nav__link">
|
|
5407
|
-
React UI
|
|
5408
|
-
</a>
|
|
5409
|
-
</li>
|
|
5410
|
-
|
|
5411
|
-
|
|
5412
|
-
|
|
5413
|
-
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
5349
|
<li class="md-nav__item">
|
|
5420
5350
|
<a href="../../../development/core/role-internals.html" class="md-nav__link">
|
|
5421
5351
|
Role Internals
|
|
@@ -7377,7 +7307,9 @@ a more powerful subclass and should be used instead of directly inheriting from
|
|
|
7377
7307
|
|
|
7378
7308
|
<details class="quote">
|
|
7379
7309
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
7380
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7310
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-112">112</a></span>
|
|
7311
|
+
<span class="normal"><a href="#__codelineno-0-113">113</a></span>
|
|
7312
|
+
<span class="normal"><a href="#__codelineno-0-114">114</a></span>
|
|
7381
7313
|
<span class="normal"><a href="#__codelineno-0-115">115</a></span>
|
|
7382
7314
|
<span class="normal"><a href="#__codelineno-0-116">116</a></span>
|
|
7383
7315
|
<span class="normal"><a href="#__codelineno-0-117">117</a></span>
|
|
@@ -7386,20 +7318,18 @@ a more powerful subclass and should be used instead of directly inheriting from
|
|
|
7386
7318
|
<span class="normal"><a href="#__codelineno-0-120">120</a></span>
|
|
7387
7319
|
<span class="normal"><a href="#__codelineno-0-121">121</a></span>
|
|
7388
7320
|
<span class="normal"><a href="#__codelineno-0-122">122</a></span>
|
|
7389
|
-
<span class="normal"><a href="#__codelineno-0-123">123</a></span>
|
|
7390
|
-
<
|
|
7391
|
-
<
|
|
7392
|
-
<a id="__codelineno-0-115" name="__codelineno-0-115"></a
|
|
7393
|
-
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd">
|
|
7394
|
-
<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
|
|
7395
|
-
<a id="__codelineno-0-118" name="__codelineno-0-118"></a
|
|
7396
|
-
<a id="__codelineno-0-119" name="__codelineno-0-119"></a
|
|
7321
|
+
<span class="normal"><a href="#__codelineno-0-123">123</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="k">class</span> <span class="nc">CSVChoiceField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">ChoiceField</span><span class="p">):</span>
|
|
7322
|
+
<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="w"> </span><span class="sd">"""</span>
|
|
7323
|
+
<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> Invert the provided set of choices to take the human-friendly label as input, and return the database value.</span>
|
|
7324
|
+
<a id="__codelineno-0-115" name="__codelineno-0-115"></a>
|
|
7325
|
+
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> Despite the name, this is no longer used in CSV imports since 2.0, but *is* used in JSON/YAML import of DeviceTypes.</span>
|
|
7326
|
+
<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> """</span>
|
|
7327
|
+
<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
|
|
7328
|
+
<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="n">STATIC_CHOICES</span> <span class="o">=</span> <span class="kc">True</span>
|
|
7397
7329
|
<a id="__codelineno-0-120" name="__codelineno-0-120"></a>
|
|
7398
|
-
<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="
|
|
7399
|
-
<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
|
|
7400
|
-
<a id="__codelineno-0-123" name="__codelineno-0-123"></a>
|
|
7401
|
-
<a id="__codelineno-0-124" name="__codelineno-0-124"></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="n">choices</span><span class="o">=</span><span class="n">choices</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
7402
|
-
<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="n">core_choices</span><span class="o">.</span><span class="n">unpack_grouped_choices</span><span class="p">(</span><span class="n">choices</span><span class="p">)</span>
|
|
7330
|
+
<a id="__codelineno-0-121" name="__codelineno-0-121"></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="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="p">(),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
7331
|
+
<a id="__codelineno-0-122" name="__codelineno-0-122"></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="n">choices</span><span class="o">=</span><span class="n">choices</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
7332
|
+
<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="n">core_choices</span><span class="o">.</span><span class="n">unpack_grouped_choices</span><span class="p">(</span><span class="n">choices</span><span class="p">)</span>
|
|
7403
7333
|
</code></pre></div></td></tr></table></div>
|
|
7404
7334
|
</details>
|
|
7405
7335
|
|
|
@@ -7444,7 +7374,9 @@ a more powerful subclass and should be used instead of directly inheriting from
|
|
|
7444
7374
|
|
|
7445
7375
|
<details class="quote">
|
|
7446
7376
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
7447
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7377
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-165">165</a></span>
|
|
7378
|
+
<span class="normal"><a href="#__codelineno-0-166">166</a></span>
|
|
7379
|
+
<span class="normal"><a href="#__codelineno-0-167">167</a></span>
|
|
7448
7380
|
<span class="normal"><a href="#__codelineno-0-168">168</a></span>
|
|
7449
7381
|
<span class="normal"><a href="#__codelineno-0-169">169</a></span>
|
|
7450
7382
|
<span class="normal"><a href="#__codelineno-0-170">170</a></span>
|
|
@@ -7481,48 +7413,46 @@ a more powerful subclass and should be used instead of directly inheriting from
|
|
|
7481
7413
|
<span class="normal"><a href="#__codelineno-0-201">201</a></span>
|
|
7482
7414
|
<span class="normal"><a href="#__codelineno-0-202">202</a></span>
|
|
7483
7415
|
<span class="normal"><a href="#__codelineno-0-203">203</a></span>
|
|
7484
|
-
<span class="normal"><a href="#__codelineno-0-204">204</a></span>
|
|
7485
|
-
<
|
|
7486
|
-
<
|
|
7487
|
-
<a id="__codelineno-0-168" name="__codelineno-0-168"></a
|
|
7488
|
-
<a id="__codelineno-0-169" name="__codelineno-0-169"></a><span class="sd">
|
|
7489
|
-
<a id="__codelineno-0-170" name="__codelineno-0-170"></a>
|
|
7490
|
-
<a id="__codelineno-0-171" name="__codelineno-0-171"></a
|
|
7491
|
-
<a id="__codelineno-0-172" name="__codelineno-0-172"></a
|
|
7416
|
+
<span class="normal"><a href="#__codelineno-0-204">204</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-165" name="__codelineno-0-165"></a><span class="k">class</span> <span class="nc">CSVContentTypeField</span><span class="p">(</span><span class="n">CSVModelChoiceField</span><span class="p">):</span>
|
|
7417
|
+
<a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="w"> </span><span class="sd">"""</span>
|
|
7418
|
+
<a id="__codelineno-0-167" name="__codelineno-0-167"></a><span class="sd"> Reference a ContentType in the form `{app_label}.{model}`.</span>
|
|
7419
|
+
<a id="__codelineno-0-168" name="__codelineno-0-168"></a>
|
|
7420
|
+
<a id="__codelineno-0-169" name="__codelineno-0-169"></a><span class="sd"> Note: class name is misleading; this field is also used in numerous FilterSets where it has nothing to do with CSV.</span>
|
|
7421
|
+
<a id="__codelineno-0-170" name="__codelineno-0-170"></a><span class="sd"> """</span>
|
|
7422
|
+
<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
|
|
7423
|
+
<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">STATIC_CHOICES</span> <span class="o">=</span> <span class="kc">True</span>
|
|
7492
7424
|
<a id="__codelineno-0-173" name="__codelineno-0-173"></a>
|
|
7493
|
-
<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="
|
|
7494
|
-
<a id="__codelineno-0-175" name="__codelineno-0-175"></a>
|
|
7495
|
-
<a id="__codelineno-0-176" name="__codelineno-0-176"></a
|
|
7496
|
-
<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="
|
|
7497
|
-
<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="sd">
|
|
7498
|
-
<a id="__codelineno-0-179" name="__codelineno-0-179"></a
|
|
7499
|
-
<a id="__codelineno-0-180" name="__codelineno-0-180"></a
|
|
7500
|
-
<a id="__codelineno-0-181" name="__codelineno-0-181"></a>
|
|
7501
|
-
<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
|
|
7502
|
-
<a id="__codelineno-0-183" name="__codelineno-0-183"></a>
|
|
7503
|
-
<a id="__codelineno-0-184" name="__codelineno-0-184"></a>
|
|
7504
|
-
<a id="__codelineno-0-185" name="__codelineno-0-185"></a>
|
|
7505
|
-
<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">
|
|
7506
|
-
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="
|
|
7507
|
-
<a id="__codelineno-0-188" name="__codelineno-0-188"></a>
|
|
7508
|
-
<a id="__codelineno-0-189" name="__codelineno-0-189"></a>
|
|
7509
|
-
<a id="__codelineno-0-190" name="__codelineno-0-190"></a>
|
|
7510
|
-
<a id="__codelineno-0-191" name="__codelineno-0-191"></a>
|
|
7511
|
-
<a id="__codelineno-0-192" name="__codelineno-0-192"></a>
|
|
7512
|
-
<a id="__codelineno-0-193" name="__codelineno-0-193"></a>
|
|
7425
|
+
<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
7426
|
+
<a id="__codelineno-0-175" name="__codelineno-0-175"></a><span class="w"> </span><span class="sd">"""</span>
|
|
7427
|
+
<a id="__codelineno-0-176" name="__codelineno-0-176"></a><span class="sd"> Allow this field to support `{app_label}.{model}` style, null values, or PK-based lookups</span>
|
|
7428
|
+
<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="sd"> depending on how the field is used.</span>
|
|
7429
|
+
<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="sd"> """</span>
|
|
7430
|
+
<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
7431
|
+
<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
7432
|
+
<a id="__codelineno-0-181" name="__codelineno-0-181"></a>
|
|
7433
|
+
<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="c1"># Only pass through strings if they aren't numeric. Otherwise cast to `int`.</span>
|
|
7434
|
+
<a id="__codelineno-0-183" name="__codelineno-0-183"></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>
|
|
7435
|
+
<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
|
|
7436
|
+
<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="k">return</span> <span class="n">value</span>
|
|
7437
|
+
<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">else</span><span class="p">:</span>
|
|
7438
|
+
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="n">value</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
7439
|
+
<a id="__codelineno-0-188" name="__codelineno-0-188"></a>
|
|
7440
|
+
<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="c1"># Integers are PKs</span>
|
|
7441
|
+
<a id="__codelineno-0-190" name="__codelineno-0-190"></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">int</span><span class="p">):</span>
|
|
7442
|
+
<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
|
|
7443
|
+
<a id="__codelineno-0-192" name="__codelineno-0-192"></a>
|
|
7444
|
+
<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">value</span><span class="o">.</span><span class="n">app_label</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">value</span><span class="o">.</span><span class="n">model</span><span class="si">}</span><span class="s2">"</span>
|
|
7513
7445
|
<a id="__codelineno-0-194" name="__codelineno-0-194"></a>
|
|
7514
|
-
<a id="__codelineno-0-195" name="__codelineno-0-195"></a>
|
|
7515
|
-
<a id="__codelineno-0-196" name="__codelineno-0-196"></a>
|
|
7516
|
-
<a id="__codelineno-0-197" name="__codelineno-0-197"></a>
|
|
7517
|
-
<a id="__codelineno-0-198" name="__codelineno-0-198"></a>
|
|
7518
|
-
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="k">
|
|
7519
|
-
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="
|
|
7520
|
-
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="k">
|
|
7521
|
-
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="k">
|
|
7522
|
-
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="k">
|
|
7523
|
-
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="k">
|
|
7524
|
-
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="k">except</span> <span class="n">ObjectDoesNotExist</span><span class="p">:</span>
|
|
7525
|
-
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="s2">"Invalid object type"</span><span class="p">)</span>
|
|
7446
|
+
<a id="__codelineno-0-195" name="__codelineno-0-195"></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>
|
|
7447
|
+
<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
7448
|
+
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">try</span><span class="p">:</span>
|
|
7449
|
+
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="n">app_label</span><span class="p">,</span> <span class="n">model</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"."</span><span class="p">)</span>
|
|
7450
|
+
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
7451
|
+
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="s1">'Object type must be specified as "<app_label>.<model>"'</span><span class="p">)</span>
|
|
7452
|
+
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="k">try</span><span class="p">:</span>
|
|
7453
|
+
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">app_label</span><span class="o">=</span><span class="n">app_label</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="n">model</span><span class="p">)</span>
|
|
7454
|
+
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="k">except</span> <span class="n">ObjectDoesNotExist</span><span class="p">:</span>
|
|
7455
|
+
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="s2">"Invalid object type"</span><span class="p">)</span>
|
|
7526
7456
|
</code></pre></div></td></tr></table></div>
|
|
7527
7457
|
</details>
|
|
7528
7458
|
|
|
@@ -7556,7 +7486,9 @@ depending on how the field is used.</p>
|
|
|
7556
7486
|
|
|
7557
7487
|
<details class="quote">
|
|
7558
7488
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
7559
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7489
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-174">174</a></span>
|
|
7490
|
+
<span class="normal"><a href="#__codelineno-0-175">175</a></span>
|
|
7491
|
+
<span class="normal"><a href="#__codelineno-0-176">176</a></span>
|
|
7560
7492
|
<span class="normal"><a href="#__codelineno-0-177">177</a></span>
|
|
7561
7493
|
<span class="normal"><a href="#__codelineno-0-178">178</a></span>
|
|
7562
7494
|
<span class="normal"><a href="#__codelineno-0-179">179</a></span>
|
|
@@ -7573,28 +7505,26 @@ depending on how the field is used.</p>
|
|
|
7573
7505
|
<span class="normal"><a href="#__codelineno-0-190">190</a></span>
|
|
7574
7506
|
<span class="normal"><a href="#__codelineno-0-191">191</a></span>
|
|
7575
7507
|
<span class="normal"><a href="#__codelineno-0-192">192</a></span>
|
|
7576
|
-
<span class="normal"><a href="#__codelineno-0-193">193</a></span>
|
|
7577
|
-
<
|
|
7578
|
-
<
|
|
7579
|
-
<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="
|
|
7580
|
-
<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="sd">
|
|
7581
|
-
<a id="__codelineno-0-179" name="__codelineno-0-179"></a
|
|
7582
|
-
<a id="__codelineno-0-180" name="__codelineno-0-180"></a
|
|
7583
|
-
<a id="__codelineno-0-181" name="__codelineno-0-181"></a>
|
|
7584
|
-
<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
|
|
7585
|
-
<a id="__codelineno-0-183" name="__codelineno-0-183"></a>
|
|
7586
|
-
<a id="__codelineno-0-184" name="__codelineno-0-184"></a>
|
|
7587
|
-
<a id="__codelineno-0-185" name="__codelineno-0-185"></a>
|
|
7588
|
-
<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">
|
|
7589
|
-
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="
|
|
7590
|
-
<a id="__codelineno-0-188" name="__codelineno-0-188"></a>
|
|
7591
|
-
<a id="__codelineno-0-189" name="__codelineno-0-189"></a>
|
|
7592
|
-
<a id="__codelineno-0-190" name="__codelineno-0-190"></a>
|
|
7593
|
-
<a id="__codelineno-0-191" name="__codelineno-0-191"></a>
|
|
7594
|
-
<a id="__codelineno-0-192" name="__codelineno-0-192"></a>
|
|
7595
|
-
<a id="__codelineno-0-193" name="__codelineno-0-193"></a>
|
|
7596
|
-
<a id="__codelineno-0-194" name="__codelineno-0-194"></a>
|
|
7597
|
-
<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">value</span><span class="o">.</span><span class="n">app_label</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">value</span><span class="o">.</span><span class="n">model</span><span class="si">}</span><span class="s2">"</span>
|
|
7508
|
+
<span class="normal"><a href="#__codelineno-0-193">193</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
7509
|
+
<a id="__codelineno-0-175" name="__codelineno-0-175"></a><span class="w"> </span><span class="sd">"""</span>
|
|
7510
|
+
<a id="__codelineno-0-176" name="__codelineno-0-176"></a><span class="sd"> Allow this field to support `{app_label}.{model}` style, null values, or PK-based lookups</span>
|
|
7511
|
+
<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="sd"> depending on how the field is used.</span>
|
|
7512
|
+
<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="sd"> """</span>
|
|
7513
|
+
<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
7514
|
+
<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
7515
|
+
<a id="__codelineno-0-181" name="__codelineno-0-181"></a>
|
|
7516
|
+
<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="c1"># Only pass through strings if they aren't numeric. Otherwise cast to `int`.</span>
|
|
7517
|
+
<a id="__codelineno-0-183" name="__codelineno-0-183"></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>
|
|
7518
|
+
<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
|
|
7519
|
+
<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="k">return</span> <span class="n">value</span>
|
|
7520
|
+
<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">else</span><span class="p">:</span>
|
|
7521
|
+
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="n">value</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
7522
|
+
<a id="__codelineno-0-188" name="__codelineno-0-188"></a>
|
|
7523
|
+
<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="c1"># Integers are PKs</span>
|
|
7524
|
+
<a id="__codelineno-0-190" name="__codelineno-0-190"></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">int</span><span class="p">):</span>
|
|
7525
|
+
<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
|
|
7526
|
+
<a id="__codelineno-0-192" name="__codelineno-0-192"></a>
|
|
7527
|
+
<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">value</span><span class="o">.</span><span class="n">app_label</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">value</span><span class="o">.</span><span class="n">model</span><span class="si">}</span><span class="s2">"</span>
|
|
7598
7528
|
</code></pre></div></td></tr></table></div>
|
|
7599
7529
|
</details>
|
|
7600
7530
|
</div>
|
|
@@ -7662,7 +7592,9 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
|
|
|
7662
7592
|
|
|
7663
7593
|
<details class="quote">
|
|
7664
7594
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
7665
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7595
|
+
<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>
|
|
7596
|
+
<span class="normal"><a href="#__codelineno-0-48">48</a></span>
|
|
7597
|
+
<span class="normal"><a href="#__codelineno-0-49">49</a></span>
|
|
7666
7598
|
<span class="normal"><a href="#__codelineno-0-50">50</a></span>
|
|
7667
7599
|
<span class="normal"><a href="#__codelineno-0-51">51</a></span>
|
|
7668
7600
|
<span class="normal"><a href="#__codelineno-0-52">52</a></span>
|
|
@@ -7691,40 +7623,38 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
|
|
|
7691
7623
|
<span class="normal"><a href="#__codelineno-0-75">75</a></span>
|
|
7692
7624
|
<span class="normal"><a href="#__codelineno-0-76">76</a></span>
|
|
7693
7625
|
<span class="normal"><a href="#__codelineno-0-77">77</a></span>
|
|
7694
|
-
<span class="normal"><a href="#__codelineno-0-78">78</a></span>
|
|
7695
|
-
<
|
|
7696
|
-
<
|
|
7697
|
-
<a id="__codelineno-0-50" name="__codelineno-0-50"></a
|
|
7698
|
-
<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd">
|
|
7626
|
+
<span class="normal"><a href="#__codelineno-0-78">78</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">CSVDataField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">):</span>
|
|
7627
|
+
<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">"""</span>
|
|
7628
|
+
<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> A CharField (rendered as a Textarea) which expects CSV-formatted data.</span>
|
|
7629
|
+
<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
|
|
7630
|
+
<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> Initial value is a list of headers corresponding to the required fields for the given serializer class.</span>
|
|
7699
7631
|
<a id="__codelineno-0-52" name="__codelineno-0-52"></a>
|
|
7700
|
-
<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd">
|
|
7701
|
-
<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
|
|
7702
|
-
<a id="__codelineno-0-55" name="__codelineno-0-55"></a
|
|
7703
|
-
<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd">
|
|
7704
|
-
<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
|
|
7705
|
-
<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd">
|
|
7706
|
-
<a id="__codelineno-0-59" name="__codelineno-0-59"></a
|
|
7707
|
-
<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="
|
|
7632
|
+
<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> This no longer actually does any CSV parsing or validation on its own,</span>
|
|
7633
|
+
<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> as that is now handled by the NautobotCSVParser class and the REST API serializers.</span>
|
|
7634
|
+
<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
|
|
7635
|
+
<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Args:</span>
|
|
7636
|
+
<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> required_field_names (list[str]): List of field names representing required fields for this import.</span>
|
|
7637
|
+
<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> """</span>
|
|
7638
|
+
<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
|
|
7639
|
+
<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">django_forms</span><span class="o">.</span><span class="n">Textarea</span>
|
|
7708
7640
|
<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
|
|
7709
|
-
<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="
|
|
7710
|
-
<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
|
|
7711
|
-
<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
|
|
7712
|
-
<a id="__codelineno-0-65" name="__codelineno-0-65"></a>
|
|
7713
|
-
<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="
|
|
7641
|
+
<a id="__codelineno-0-62" name="__codelineno-0-62"></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">required_field_names</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
7642
|
+
<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="bp">self</span><span class="o">.</span><span class="n">required_field_names</span> <span class="o">=</span> <span class="n">required_field_names</span>
|
|
7643
|
+
<a id="__codelineno-0-64" name="__codelineno-0-64"></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>
|
|
7644
|
+
<a id="__codelineno-0-65" name="__codelineno-0-65"></a>
|
|
7645
|
+
<a id="__codelineno-0-66" name="__codelineno-0-66"></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>
|
|
7714
7646
|
<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
|
|
7715
|
-
<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="
|
|
7716
|
-
<a id="__codelineno-0-69" name="__codelineno-0-69"></a>
|
|
7717
|
-
<a id="__codelineno-0-70" name="__codelineno-0-70"></a>
|
|
7718
|
-
<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
7719
|
-
<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
7720
|
-
<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
7721
|
-
<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
7722
|
-
<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
|
|
7723
|
-
<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
|
|
7724
|
-
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">"
|
|
7725
|
-
<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
|
|
7726
|
-
<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">"in double quotes."</span>
|
|
7727
|
-
<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
|
|
7647
|
+
<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="bp">self</span><span class="o">.</span><span class="n">strip</span> <span class="o">=</span> <span class="kc">False</span>
|
|
7648
|
+
<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="p">:</span>
|
|
7649
|
+
<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="s2">""</span>
|
|
7650
|
+
<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial</span><span class="p">:</span>
|
|
7651
|
+
<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="bp">self</span><span class="o">.</span><span class="n">initial</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">required_field_names</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span>
|
|
7652
|
+
<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span><span class="p">:</span>
|
|
7653
|
+
<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span> <span class="o">=</span> <span class="p">(</span>
|
|
7654
|
+
<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="s2">"Enter the list of column headers followed by one line per record to be imported, using "</span>
|
|
7655
|
+
<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">"commas to separate values. Multi-line data and values containing commas may be wrapped "</span>
|
|
7656
|
+
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">"in double quotes."</span>
|
|
7657
|
+
<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">)</span>
|
|
7728
7658
|
</code></pre></div></td></tr></table></div>
|
|
7729
7659
|
</details>
|
|
7730
7660
|
|
|
@@ -7770,7 +7700,9 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
|
|
|
7770
7700
|
|
|
7771
7701
|
<details class="quote">
|
|
7772
7702
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
7773
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7703
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
|
|
7704
|
+
<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
|
|
7705
|
+
<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
|
|
7774
7706
|
<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
|
|
7775
7707
|
<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
|
|
7776
7708
|
<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
|
|
@@ -7796,37 +7728,35 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
|
|
|
7796
7728
|
<span class="normal"><a href="#__codelineno-0-106">106</a></span>
|
|
7797
7729
|
<span class="normal"><a href="#__codelineno-0-107">107</a></span>
|
|
7798
7730
|
<span class="normal"><a href="#__codelineno-0-108">108</a></span>
|
|
7799
|
-
<span class="normal"><a href="#__codelineno-0-109">109</a></span>
|
|
7800
|
-
<
|
|
7801
|
-
<
|
|
7802
|
-
<a id="__codelineno-0-84" name="__codelineno-0-84"></a
|
|
7803
|
-
<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd">
|
|
7804
|
-
<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
|
|
7805
|
-
<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd">
|
|
7806
|
-
<a id="__codelineno-0-88" name="__codelineno-0-88"></a
|
|
7807
|
-
<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="
|
|
7808
|
-
<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
|
|
7809
|
-
<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
|
|
7810
|
-
<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="
|
|
7731
|
+
<span class="normal"><a href="#__codelineno-0-109">109</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="k">class</span> <span class="nc">CSVFileField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">FileField</span><span class="p">):</span>
|
|
7732
|
+
<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">"""</span>
|
|
7733
|
+
<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> A FileField (rendered as a ClearableFileInput) which expects a file containing CSV-formatted data.</span>
|
|
7734
|
+
<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
|
|
7735
|
+
<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> This no longer actually does any CSV parsing or validation on its own,</span>
|
|
7736
|
+
<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> as that is now handled by the NautobotCSVParser class and the REST API serializers.</span>
|
|
7737
|
+
<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> """</span>
|
|
7738
|
+
<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
|
|
7739
|
+
<a id="__codelineno-0-89" name="__codelineno-0-89"></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>
|
|
7740
|
+
<a id="__codelineno-0-90" name="__codelineno-0-90"></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>
|
|
7741
|
+
<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
|
|
7742
|
+
<a id="__codelineno-0-92" name="__codelineno-0-92"></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>
|
|
7811
7743
|
<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
|
|
7812
|
-
<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="
|
|
7813
|
-
<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
|
|
7814
|
-
<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
7815
|
-
<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
7816
|
-
<a id="__codelineno-0-98" name="__codelineno-0-98"></a>
|
|
7817
|
-
<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
|
|
7818
|
-
<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">"
|
|
7819
|
-
<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
|
|
7820
|
-
<a id="__codelineno-0-102" name="__codelineno-0-102"></a>
|
|
7821
|
-
<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
|
|
7822
|
-
<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
|
|
7823
|
-
<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
|
|
7824
|
-
<a id="__codelineno-0-106" name="__codelineno-0-106"></a
|
|
7825
|
-
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
|
|
7826
|
-
<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
|
|
7827
|
-
<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
|
|
7828
|
-
<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">file</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
|
|
7829
|
-
<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">return</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8-sig"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
7744
|
+
<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="p">:</span>
|
|
7745
|
+
<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="s2">"CSV File"</span>
|
|
7746
|
+
<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span><span class="p">:</span>
|
|
7747
|
+
<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span> <span class="o">=</span> <span class="p">(</span>
|
|
7748
|
+
<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">"Select a CSV file to upload. It should contain column headers in the first row and use commas "</span>
|
|
7749
|
+
<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="s2">"to separate values. Multi-line data and values containing commas may be wrapped "</span>
|
|
7750
|
+
<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">"in double quotes."</span>
|
|
7751
|
+
<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="p">)</span>
|
|
7752
|
+
<a id="__codelineno-0-102" name="__codelineno-0-102"></a>
|
|
7753
|
+
<a id="__codelineno-0-103" name="__codelineno-0-103"></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">file</span><span class="p">):</span>
|
|
7754
|
+
<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="w"> </span><span class="sd">"""For parity with CSVDataField, this returns the CSV text rather than an UploadedFile object."""</span>
|
|
7755
|
+
<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">if</span> <span class="n">file</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
7756
|
+
<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
7757
|
+
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
|
|
7758
|
+
<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">file</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
|
|
7759
|
+
<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8-sig"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
7830
7760
|
</code></pre></div></td></tr></table></div>
|
|
7831
7761
|
</details>
|
|
7832
7762
|
|
|
@@ -7859,19 +7789,19 @@ as that is now handled by the NautobotCSVParser class and the REST API serialize
|
|
|
7859
7789
|
|
|
7860
7790
|
<details class="quote">
|
|
7861
7791
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
7862
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7792
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-103">103</a></span>
|
|
7793
|
+
<span class="normal"><a href="#__codelineno-0-104">104</a></span>
|
|
7794
|
+
<span class="normal"><a href="#__codelineno-0-105">105</a></span>
|
|
7863
7795
|
<span class="normal"><a href="#__codelineno-0-106">106</a></span>
|
|
7864
7796
|
<span class="normal"><a href="#__codelineno-0-107">107</a></span>
|
|
7865
7797
|
<span class="normal"><a href="#__codelineno-0-108">108</a></span>
|
|
7866
|
-
<span class="normal"><a href="#__codelineno-0-109">109</a></span>
|
|
7867
|
-
<
|
|
7868
|
-
<
|
|
7869
|
-
<a id="__codelineno-0-106" name="__codelineno-0-106"></a
|
|
7870
|
-
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
|
|
7871
|
-
<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
|
|
7872
|
-
<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
|
|
7873
|
-
<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">file</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
|
|
7874
|
-
<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">return</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8-sig"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
7798
|
+
<span class="normal"><a href="#__codelineno-0-109">109</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-103" name="__codelineno-0-103"></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">file</span><span class="p">):</span>
|
|
7799
|
+
<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="w"> </span><span class="sd">"""For parity with CSVDataField, this returns the CSV text rather than an UploadedFile object."""</span>
|
|
7800
|
+
<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">if</span> <span class="n">file</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
7801
|
+
<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
7802
|
+
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
|
|
7803
|
+
<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">file</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
|
|
7804
|
+
<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8-sig"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
7875
7805
|
</code></pre></div></td></tr></table></div>
|
|
7876
7806
|
</details>
|
|
7877
7807
|
</div>
|
|
@@ -7908,7 +7838,9 @@ nothing to do with CSV data.</p>
|
|
|
7908
7838
|
|
|
7909
7839
|
<details class="quote">
|
|
7910
7840
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
7911
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7841
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-146">146</a></span>
|
|
7842
|
+
<span class="normal"><a href="#__codelineno-0-147">147</a></span>
|
|
7843
|
+
<span class="normal"><a href="#__codelineno-0-148">148</a></span>
|
|
7912
7844
|
<span class="normal"><a href="#__codelineno-0-149">149</a></span>
|
|
7913
7845
|
<span class="normal"><a href="#__codelineno-0-150">150</a></span>
|
|
7914
7846
|
<span class="normal"><a href="#__codelineno-0-151">151</a></span>
|
|
@@ -7922,25 +7854,23 @@ nothing to do with CSV data.</p>
|
|
|
7922
7854
|
<span class="normal"><a href="#__codelineno-0-159">159</a></span>
|
|
7923
7855
|
<span class="normal"><a href="#__codelineno-0-160">160</a></span>
|
|
7924
7856
|
<span class="normal"><a href="#__codelineno-0-161">161</a></span>
|
|
7925
|
-
<span class="normal"><a href="#__codelineno-0-162">162</a></span>
|
|
7926
|
-
<
|
|
7927
|
-
<
|
|
7928
|
-
<a id="__codelineno-0-149" name="__codelineno-0-149"></a
|
|
7929
|
-
<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd">
|
|
7930
|
-
<a id="__codelineno-0-151" name="__codelineno-0-151"></a>
|
|
7931
|
-
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd">
|
|
7932
|
-
<a id="__codelineno-0-153" name="__codelineno-0-153"></a
|
|
7933
|
-
<a id="__codelineno-0-154" name="__codelineno-0-154"></a
|
|
7934
|
-
<a id="__codelineno-0-155" name="__codelineno-0-155"></a>
|
|
7935
|
-
<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="
|
|
7936
|
-
<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
|
|
7937
|
-
<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="p">
|
|
7938
|
-
<a id="__codelineno-0-159" name="__codelineno-0-159"></a>
|
|
7939
|
-
<a id="__codelineno-0-160" name="__codelineno-0-160"></a>
|
|
7940
|
-
<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="k">
|
|
7941
|
-
<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="k">
|
|
7942
|
-
<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="k">except</span> <span class="n">MultipleObjectsReturned</span><span class="p">:</span>
|
|
7943
|
-
<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'"</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s1">" is not a unique value for this field; multiple objects were found'</span><span class="p">)</span>
|
|
7857
|
+
<span class="normal"><a href="#__codelineno-0-162">162</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="k">class</span> <span class="nc">CSVModelChoiceField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">ModelChoiceField</span><span class="p">):</span>
|
|
7858
|
+
<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="w"> </span><span class="sd">"""</span>
|
|
7859
|
+
<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> Provides additional validation for model choices entered as CSV data.</span>
|
|
7860
|
+
<a id="__codelineno-0-149" name="__codelineno-0-149"></a>
|
|
7861
|
+
<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> Note: class name is misleading; the subclass CSVContentTypeField (below) is also used in FilterSets, where it has</span>
|
|
7862
|
+
<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> nothing to do with CSV data.</span>
|
|
7863
|
+
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> """</span>
|
|
7864
|
+
<a id="__codelineno-0-153" name="__codelineno-0-153"></a>
|
|
7865
|
+
<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span>
|
|
7866
|
+
<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="s2">"invalid_choice"</span><span class="p">:</span> <span class="s2">"Object not found."</span><span class="p">,</span>
|
|
7867
|
+
<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="p">}</span>
|
|
7868
|
+
<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
|
|
7869
|
+
<a id="__codelineno-0-158" name="__codelineno-0-158"></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>
|
|
7870
|
+
<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="k">try</span><span class="p">:</span>
|
|
7871
|
+
<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
7872
|
+
<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="k">except</span> <span class="n">MultipleObjectsReturned</span><span class="p">:</span>
|
|
7873
|
+
<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'"</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s1">" is not a unique value for this field; multiple objects were found'</span><span class="p">)</span>
|
|
7944
7874
|
</code></pre></div></td></tr></table></div>
|
|
7945
7875
|
</details>
|
|
7946
7876
|
|
|
@@ -8062,7 +7992,9 @@ JSON/YAML import of DeviceTypes still.</p>
|
|
|
8062
7992
|
|
|
8063
7993
|
<details class="quote">
|
|
8064
7994
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
8065
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
7995
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-126">126</a></span>
|
|
7996
|
+
<span class="normal"><a href="#__codelineno-0-127">127</a></span>
|
|
7997
|
+
<span class="normal"><a href="#__codelineno-0-128">128</a></span>
|
|
8066
7998
|
<span class="normal"><a href="#__codelineno-0-129">129</a></span>
|
|
8067
7999
|
<span class="normal"><a href="#__codelineno-0-130">130</a></span>
|
|
8068
8000
|
<span class="normal"><a href="#__codelineno-0-131">131</a></span>
|
|
@@ -8077,26 +8009,24 @@ JSON/YAML import of DeviceTypes still.</p>
|
|
|
8077
8009
|
<span class="normal"><a href="#__codelineno-0-140">140</a></span>
|
|
8078
8010
|
<span class="normal"><a href="#__codelineno-0-141">141</a></span>
|
|
8079
8011
|
<span class="normal"><a href="#__codelineno-0-142">142</a></span>
|
|
8080
|
-
<span class="normal"><a href="#__codelineno-0-143">143</a></span>
|
|
8081
|
-
<
|
|
8082
|
-
<
|
|
8083
|
-
<a id="__codelineno-0-129" name="__codelineno-0-129"></a
|
|
8084
|
-
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd">
|
|
8085
|
-
<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
|
|
8086
|
-
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd">
|
|
8087
|
-
<a id="__codelineno-0-133" name="__codelineno-0-133"></a
|
|
8088
|
-
<a id="__codelineno-0-134" name="__codelineno-0-134"></a><span class="
|
|
8089
|
-
<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
|
|
8090
|
-
<a id="__codelineno-0-136" name="__codelineno-0-136"></a>
|
|
8091
|
-
<a id="__codelineno-0-137" name="__codelineno-0-137"></a
|
|
8092
|
-
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">
|
|
8093
|
-
<a id="__codelineno-0-139" name="__codelineno-0-139"></a>
|
|
8094
|
-
<a id="__codelineno-0-140" name="__codelineno-0-140"></a>
|
|
8095
|
-
<a id="__codelineno-0-141" name="__codelineno-0-141"></a>
|
|
8096
|
-
<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
|
|
8097
|
-
<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="
|
|
8098
|
-
<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
8099
|
-
<a id="__codelineno-0-145" name="__codelineno-0-145"></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">v</span><span class="p">)</span>
|
|
8012
|
+
<span class="normal"><a href="#__codelineno-0-143">143</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="k">class</span> <span class="nc">CSVMultipleChoiceField</span><span class="p">(</span><span class="n">CSVChoiceField</span><span class="p">):</span>
|
|
8013
|
+
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="w"> </span><span class="sd">"""</span>
|
|
8014
|
+
<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> A version of CSVChoiceField that supports and emits a list of choice values.</span>
|
|
8015
|
+
<a id="__codelineno-0-129" name="__codelineno-0-129"></a>
|
|
8016
|
+
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> As with CSVChoiceField, the name is misleading, as this is no longer used for CSV imports, but is used for</span>
|
|
8017
|
+
<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> JSON/YAML import of DeviceTypes still.</span>
|
|
8018
|
+
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> """</span>
|
|
8019
|
+
<a id="__codelineno-0-133" name="__codelineno-0-133"></a>
|
|
8020
|
+
<a id="__codelineno-0-134" name="__codelineno-0-134"></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>
|
|
8021
|
+
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">"""Return a list of strings."""</span>
|
|
8022
|
+
<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span>
|
|
8023
|
+
<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
8024
|
+
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">return</span> <span class="p">[</span><span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span>
|
|
8025
|
+
<a id="__codelineno-0-139" name="__codelineno-0-139"></a>
|
|
8026
|
+
<a id="__codelineno-0-140" name="__codelineno-0-140"></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>
|
|
8027
|
+
<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="w"> </span><span class="sd">"""Validate that each of the input values is in self.choices."""</span>
|
|
8028
|
+
<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
8029
|
+
<a id="__codelineno-0-143" name="__codelineno-0-143"></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">v</span><span class="p">)</span>
|
|
8100
8030
|
</code></pre></div></td></tr></table></div>
|
|
8101
8031
|
</details>
|
|
8102
8032
|
|
|
@@ -8129,15 +8059,15 @@ JSON/YAML import of DeviceTypes still.</p>
|
|
|
8129
8059
|
|
|
8130
8060
|
<details class="quote">
|
|
8131
8061
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
8132
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
8062
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-134">134</a></span>
|
|
8063
|
+
<span class="normal"><a href="#__codelineno-0-135">135</a></span>
|
|
8064
|
+
<span class="normal"><a href="#__codelineno-0-136">136</a></span>
|
|
8133
8065
|
<span class="normal"><a href="#__codelineno-0-137">137</a></span>
|
|
8134
|
-
<span class="normal"><a href="#__codelineno-0-138">138</a></span>
|
|
8135
|
-
<
|
|
8136
|
-
<
|
|
8137
|
-
<a id="__codelineno-0-137" name="__codelineno-0-137"></a
|
|
8138
|
-
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">
|
|
8139
|
-
<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
8140
|
-
<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="k">return</span> <span class="p">[</span><span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span>
|
|
8066
|
+
<span class="normal"><a href="#__codelineno-0-138">138</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-134" name="__codelineno-0-134"></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>
|
|
8067
|
+
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">"""Return a list of strings."""</span>
|
|
8068
|
+
<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span>
|
|
8069
|
+
<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
8070
|
+
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">return</span> <span class="p">[</span><span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span>
|
|
8141
8071
|
</code></pre></div></td></tr></table></div>
|
|
8142
8072
|
</details>
|
|
8143
8073
|
</div>
|
|
@@ -8161,13 +8091,13 @@ JSON/YAML import of DeviceTypes still.</p>
|
|
|
8161
8091
|
|
|
8162
8092
|
<details class="quote">
|
|
8163
8093
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
8164
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
8165
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
8166
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
8167
|
-
<span class="normal"><a href="#__codelineno-0-
|
|
8168
|
-
<a id="__codelineno-0-
|
|
8169
|
-
<a id="__codelineno-0-
|
|
8170
|
-
<a id="__codelineno-0-
|
|
8094
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-140">140</a></span>
|
|
8095
|
+
<span class="normal"><a href="#__codelineno-0-141">141</a></span>
|
|
8096
|
+
<span class="normal"><a href="#__codelineno-0-142">142</a></span>
|
|
8097
|
+
<span class="normal"><a href="#__codelineno-0-143">143</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-140" name="__codelineno-0-140"></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>
|
|
8098
|
+
<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="w"> </span><span class="sd">"""Validate that each of the input values is in self.choices."""</span>
|
|
8099
|
+
<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
8100
|
+
<a id="__codelineno-0-143" name="__codelineno-0-143"></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">v</span><span class="p">)</span>
|
|
8171
8101
|
</code></pre></div></td></tr></table></div>
|
|
8172
8102
|
</details>
|
|
8173
8103
|
</div>
|
|
@@ -8204,7 +8134,9 @@ purposes, similar to CSVContentTypeField above.</p>
|
|
|
8204
8134
|
|
|
8205
8135
|
<details class="quote">
|
|
8206
8136
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
8207
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
8137
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-282">282</a></span>
|
|
8138
|
+
<span class="normal"><a href="#__codelineno-0-283">283</a></span>
|
|
8139
|
+
<span class="normal"><a href="#__codelineno-0-284">284</a></span>
|
|
8208
8140
|
<span class="normal"><a href="#__codelineno-0-285">285</a></span>
|
|
8209
8141
|
<span class="normal"><a href="#__codelineno-0-286">286</a></span>
|
|
8210
8142
|
<span class="normal"><a href="#__codelineno-0-287">287</a></span>
|
|
@@ -8232,39 +8164,37 @@ purposes, similar to CSVContentTypeField above.</p>
|
|
|
8232
8164
|
<span class="normal"><a href="#__codelineno-0-309">309</a></span>
|
|
8233
8165
|
<span class="normal"><a href="#__codelineno-0-310">310</a></span>
|
|
8234
8166
|
<span class="normal"><a href="#__codelineno-0-311">311</a></span>
|
|
8235
|
-
<span class="normal"><a href="#__codelineno-0-312">312</a></span>
|
|
8236
|
-
<
|
|
8237
|
-
<
|
|
8238
|
-
<a id="__codelineno-0-285" name="__codelineno-0-285"></a
|
|
8239
|
-
<a id="__codelineno-0-286" name="__codelineno-0-286"></a><span class="sd">
|
|
8240
|
-
<a id="__codelineno-0-287" name="__codelineno-0-287"></a>
|
|
8241
|
-
<a id="__codelineno-0-288" name="__codelineno-0-288"></a><span class="sd">
|
|
8242
|
-
<a id="__codelineno-0-289" name="__codelineno-0-289"></a
|
|
8243
|
-
<a id="__codelineno-0-290" name="__codelineno-0-290"></a><span class="
|
|
8244
|
-
<a id="__codelineno-0-291" name="__codelineno-0-291"></a>
|
|
8245
|
-
<a id="__codelineno-0-292" name="__codelineno-0-292"></a>
|
|
8246
|
-
<a id="__codelineno-0-293" name="__codelineno-0-293"></a><span class="
|
|
8247
|
-
<a id="__codelineno-0-294" name="__codelineno-0-294"></a>
|
|
8248
|
-
<a id="__codelineno-0-295" name="__codelineno-0-295"></a>
|
|
8249
|
-
<a id="__codelineno-0-296" name="__codelineno-0-296"></a>
|
|
8250
|
-
<a id="__codelineno-0-297" name="__codelineno-0-297"></a>
|
|
8251
|
-
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="
|
|
8252
|
-
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="
|
|
8253
|
-
<a id="__codelineno-0-300" name="__codelineno-0-300"></a>
|
|
8254
|
-
<a id="__codelineno-0-301" name="__codelineno-0-301"></a>
|
|
8255
|
-
<a id="__codelineno-0-302" name="__codelineno-0-302"></a>
|
|
8256
|
-
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="k">
|
|
8257
|
-
<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="
|
|
8258
|
-
<a id="__codelineno-0-305" name="__codelineno-0-305"></a>
|
|
8259
|
-
<a id="__codelineno-0-306" name="__codelineno-0-306"></a>
|
|
8260
|
-
<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="
|
|
8261
|
-
<a id="__codelineno-0-308" name="__codelineno-0-308"></a>
|
|
8262
|
-
<a id="__codelineno-0-309" name="__codelineno-0-309"></a>
|
|
8263
|
-
<a id="__codelineno-0-310" name="__codelineno-0-310"></a>
|
|
8264
|
-
<a id="__codelineno-0-311" name="__codelineno-0-311"></a>
|
|
8265
|
-
<a id="__codelineno-0-312" name="__codelineno-0-312"></a>
|
|
8266
|
-
<a id="__codelineno-0-313" name="__codelineno-0-313"></a>
|
|
8267
|
-
<a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">pk_list</span><span class="p">)</span>
|
|
8167
|
+
<span class="normal"><a href="#__codelineno-0-312">312</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-282" name="__codelineno-0-282"></a><span class="k">class</span> <span class="nc">CSVMultipleContentTypeField</span><span class="p">(</span><span class="n">MultipleContentTypeField</span><span class="p">):</span>
|
|
8168
|
+
<a id="__codelineno-0-283" name="__codelineno-0-283"></a><span class="w"> </span><span class="sd">"""</span>
|
|
8169
|
+
<a id="__codelineno-0-284" name="__codelineno-0-284"></a><span class="sd"> Reference a list of `ContentType` objects in the form `{app_label}.{model}'.</span>
|
|
8170
|
+
<a id="__codelineno-0-285" name="__codelineno-0-285"></a>
|
|
8171
|
+
<a id="__codelineno-0-286" name="__codelineno-0-286"></a><span class="sd"> Note: This is unused in Nautobot core at this time, but some apps (data-validation-engine) use this for non-CSV</span>
|
|
8172
|
+
<a id="__codelineno-0-287" name="__codelineno-0-287"></a><span class="sd"> purposes, similar to CSVContentTypeField above.</span>
|
|
8173
|
+
<a id="__codelineno-0-288" name="__codelineno-0-288"></a><span class="sd"> """</span>
|
|
8174
|
+
<a id="__codelineno-0-289" name="__codelineno-0-289"></a>
|
|
8175
|
+
<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
8176
|
+
<a id="__codelineno-0-291" name="__codelineno-0-291"></a><span class="w"> </span><span class="sd">"""Parse a comma-separated string of model names into a list of PKs."""</span>
|
|
8177
|
+
<a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="c1"># "".split(",") yields [""] rather than [], which we don't want!</span>
|
|
8178
|
+
<a id="__codelineno-0-293" name="__codelineno-0-293"></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> <span class="ow">and</span> <span class="n">value</span><span class="p">:</span>
|
|
8179
|
+
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)</span>
|
|
8180
|
+
<a id="__codelineno-0-295" name="__codelineno-0-295"></a>
|
|
8181
|
+
<a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="c1"># For each model name, retrieve the model object and extract its</span>
|
|
8182
|
+
<a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="c1"># content-type PK.</span>
|
|
8183
|
+
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="n">pk_list</span> <span class="o">=</span> <span class="p">[]</span>
|
|
8184
|
+
<a id="__codelineno-0-299" name="__codelineno-0-299"></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="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
|
|
8185
|
+
<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
8186
|
+
<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="k">try</span><span class="p">:</span>
|
|
8187
|
+
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_model</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
|
8188
|
+
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">LookupError</span><span class="p">):</span>
|
|
8189
|
+
<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span>
|
|
8190
|
+
<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s2">"invalid_choice"</span><span class="p">],</span>
|
|
8191
|
+
<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="n">code</span><span class="o">=</span><span class="s2">"invalid_choice"</span><span class="p">,</span>
|
|
8192
|
+
<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="n">v</span><span class="p">},</span>
|
|
8193
|
+
<a id="__codelineno-0-308" name="__codelineno-0-308"></a> <span class="p">)</span>
|
|
8194
|
+
<a id="__codelineno-0-309" name="__codelineno-0-309"></a> <span class="n">ct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">model</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="n">model</span><span class="p">)</span>
|
|
8195
|
+
<a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="n">pk_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ct</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
|
8196
|
+
<a id="__codelineno-0-311" name="__codelineno-0-311"></a>
|
|
8197
|
+
<a id="__codelineno-0-312" name="__codelineno-0-312"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">pk_list</span><span class="p">)</span>
|
|
8268
8198
|
</code></pre></div></td></tr></table></div>
|
|
8269
8199
|
</details>
|
|
8270
8200
|
|
|
@@ -8297,7 +8227,9 @@ purposes, similar to CSVContentTypeField above.</p>
|
|
|
8297
8227
|
|
|
8298
8228
|
<details class="quote">
|
|
8299
8229
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
8300
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
8230
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-290">290</a></span>
|
|
8231
|
+
<span class="normal"><a href="#__codelineno-0-291">291</a></span>
|
|
8232
|
+
<span class="normal"><a href="#__codelineno-0-292">292</a></span>
|
|
8301
8233
|
<span class="normal"><a href="#__codelineno-0-293">293</a></span>
|
|
8302
8234
|
<span class="normal"><a href="#__codelineno-0-294">294</a></span>
|
|
8303
8235
|
<span class="normal"><a href="#__codelineno-0-295">295</a></span>
|
|
@@ -8317,31 +8249,29 @@ purposes, similar to CSVContentTypeField above.</p>
|
|
|
8317
8249
|
<span class="normal"><a href="#__codelineno-0-309">309</a></span>
|
|
8318
8250
|
<span class="normal"><a href="#__codelineno-0-310">310</a></span>
|
|
8319
8251
|
<span class="normal"><a href="#__codelineno-0-311">311</a></span>
|
|
8320
|
-
<span class="normal"><a href="#__codelineno-0-312">312</a></span>
|
|
8321
|
-
<
|
|
8322
|
-
<
|
|
8323
|
-
<a id="__codelineno-0-293" name="__codelineno-0-293"></a><span class="
|
|
8324
|
-
<a id="__codelineno-0-294" name="__codelineno-0-294"></a>
|
|
8325
|
-
<a id="__codelineno-0-295" name="__codelineno-0-295"></a>
|
|
8326
|
-
<a id="__codelineno-0-296" name="__codelineno-0-296"></a>
|
|
8327
|
-
<a id="__codelineno-0-297" name="__codelineno-0-297"></a>
|
|
8328
|
-
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="
|
|
8329
|
-
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="
|
|
8330
|
-
<a id="__codelineno-0-300" name="__codelineno-0-300"></a>
|
|
8331
|
-
<a id="__codelineno-0-301" name="__codelineno-0-301"></a>
|
|
8332
|
-
<a id="__codelineno-0-302" name="__codelineno-0-302"></a>
|
|
8333
|
-
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="k">
|
|
8334
|
-
<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="
|
|
8335
|
-
<a id="__codelineno-0-305" name="__codelineno-0-305"></a>
|
|
8336
|
-
<a id="__codelineno-0-306" name="__codelineno-0-306"></a>
|
|
8337
|
-
<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="
|
|
8338
|
-
<a id="__codelineno-0-308" name="__codelineno-0-308"></a>
|
|
8339
|
-
<a id="__codelineno-0-309" name="__codelineno-0-309"></a>
|
|
8340
|
-
<a id="__codelineno-0-310" name="__codelineno-0-310"></a>
|
|
8341
|
-
<a id="__codelineno-0-311" name="__codelineno-0-311"></a>
|
|
8342
|
-
<a id="__codelineno-0-312" name="__codelineno-0-312"></a>
|
|
8343
|
-
<a id="__codelineno-0-313" name="__codelineno-0-313"></a>
|
|
8344
|
-
<a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">pk_list</span><span class="p">)</span>
|
|
8252
|
+
<span class="normal"><a href="#__codelineno-0-312">312</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-290" name="__codelineno-0-290"></a><span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
8253
|
+
<a id="__codelineno-0-291" name="__codelineno-0-291"></a><span class="w"> </span><span class="sd">"""Parse a comma-separated string of model names into a list of PKs."""</span>
|
|
8254
|
+
<a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="c1"># "".split(",") yields [""] rather than [], which we don't want!</span>
|
|
8255
|
+
<a id="__codelineno-0-293" name="__codelineno-0-293"></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> <span class="ow">and</span> <span class="n">value</span><span class="p">:</span>
|
|
8256
|
+
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)</span>
|
|
8257
|
+
<a id="__codelineno-0-295" name="__codelineno-0-295"></a>
|
|
8258
|
+
<a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="c1"># For each model name, retrieve the model object and extract its</span>
|
|
8259
|
+
<a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="c1"># content-type PK.</span>
|
|
8260
|
+
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="n">pk_list</span> <span class="o">=</span> <span class="p">[]</span>
|
|
8261
|
+
<a id="__codelineno-0-299" name="__codelineno-0-299"></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="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
|
|
8262
|
+
<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
8263
|
+
<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="k">try</span><span class="p">:</span>
|
|
8264
|
+
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_model</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
|
8265
|
+
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">LookupError</span><span class="p">):</span>
|
|
8266
|
+
<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span>
|
|
8267
|
+
<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s2">"invalid_choice"</span><span class="p">],</span>
|
|
8268
|
+
<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="n">code</span><span class="o">=</span><span class="s2">"invalid_choice"</span><span class="p">,</span>
|
|
8269
|
+
<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="n">v</span><span class="p">},</span>
|
|
8270
|
+
<a id="__codelineno-0-308" name="__codelineno-0-308"></a> <span class="p">)</span>
|
|
8271
|
+
<a id="__codelineno-0-309" name="__codelineno-0-309"></a> <span class="n">ct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">model</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="n">model</span><span class="p">)</span>
|
|
8272
|
+
<a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="n">pk_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ct</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
|
8273
|
+
<a id="__codelineno-0-311" name="__codelineno-0-311"></a>
|
|
8274
|
+
<a id="__codelineno-0-312" name="__codelineno-0-312"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">pk_list</span><span class="p">)</span>
|
|
8345
8275
|
</code></pre></div></td></tr></table></div>
|
|
8346
8276
|
</details>
|
|
8347
8277
|
</div>
|
|
@@ -8440,7 +8370,9 @@ purposes, similar to CSVContentTypeField above.</p>
|
|
|
8440
8370
|
|
|
8441
8371
|
<details class="quote">
|
|
8442
8372
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
8443
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
8373
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-368">368</a></span>
|
|
8374
|
+
<span class="normal"><a href="#__codelineno-0-369">369</a></span>
|
|
8375
|
+
<span class="normal"><a href="#__codelineno-0-370">370</a></span>
|
|
8444
8376
|
<span class="normal"><a href="#__codelineno-0-371">371</a></span>
|
|
8445
8377
|
<span class="normal"><a href="#__codelineno-0-372">372</a></span>
|
|
8446
8378
|
<span class="normal"><a href="#__codelineno-0-373">373</a></span>
|
|
@@ -8456,27 +8388,25 @@ purposes, similar to CSVContentTypeField above.</p>
|
|
|
8456
8388
|
<span class="normal"><a href="#__codelineno-0-383">383</a></span>
|
|
8457
8389
|
<span class="normal"><a href="#__codelineno-0-384">384</a></span>
|
|
8458
8390
|
<span class="normal"><a href="#__codelineno-0-385">385</a></span>
|
|
8459
|
-
<span class="normal"><a href="#__codelineno-0-386">386</a></span>
|
|
8460
|
-
<
|
|
8461
|
-
<
|
|
8462
|
-
<a id="__codelineno-0-371" name="__codelineno-0-371"></a><span class="
|
|
8463
|
-
<a id="__codelineno-0-372" name="__codelineno-0-372"></a
|
|
8464
|
-
<a id="__codelineno-0-373" name="__codelineno-0-373"></a><span class="
|
|
8465
|
-
<a id="__codelineno-0-374" name="__codelineno-0-374"></a>
|
|
8466
|
-
<a id="__codelineno-0-375" name="__codelineno-0-375"></a> <span class="
|
|
8467
|
-
<a id="__codelineno-0-376" name="__codelineno-0-376"></a> <span class="n">
|
|
8468
|
-
<a id="__codelineno-0-377" name="__codelineno-0-377"></a>
|
|
8469
|
-
<a id="__codelineno-0-378" name="__codelineno-0-378"></a>
|
|
8470
|
-
<a id="__codelineno-0-379" name="__codelineno-0-379"></a> <span class="
|
|
8471
|
-
<a id="__codelineno-0-380" name="__codelineno-0-380"></a>
|
|
8472
|
-
<a id="__codelineno-0-381" name="__codelineno-0-381"></a>
|
|
8473
|
-
<a id="__codelineno-0-382" name="__codelineno-0-382"></a> <span class="p">
|
|
8474
|
-
<a id="__codelineno-0-383" name="__codelineno-0-383"></a>
|
|
8475
|
-
<a id="__codelineno-0-384" name="__codelineno-0-384"></a>
|
|
8476
|
-
<a id="__codelineno-0-385" name="__codelineno-0-385"></a> <span class="n">
|
|
8477
|
-
<a id="__codelineno-0-386" name="__codelineno-0-386"></a> <span class="
|
|
8478
|
-
<a id="__codelineno-0-387" name="__codelineno-0-387"></a> <span class="n">help_text</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"help_text"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_helptext</span><span class="p">)</span>
|
|
8479
|
-
<a id="__codelineno-0-388" name="__codelineno-0-388"></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="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">help_text</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>
|
|
8391
|
+
<span class="normal"><a href="#__codelineno-0-386">386</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-368" name="__codelineno-0-368"></a><span class="k">class</span> <span class="nc">CommentField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">):</span>
|
|
8392
|
+
<a id="__codelineno-0-369" name="__codelineno-0-369"></a><span class="w"> </span><span class="sd">"""</span>
|
|
8393
|
+
<a id="__codelineno-0-370" name="__codelineno-0-370"></a><span class="sd"> A textarea with support for Markdown rendering. Exists mostly just to add a standard help_text.</span>
|
|
8394
|
+
<a id="__codelineno-0-371" name="__codelineno-0-371"></a><span class="sd"> """</span>
|
|
8395
|
+
<a id="__codelineno-0-372" name="__codelineno-0-372"></a>
|
|
8396
|
+
<a id="__codelineno-0-373" name="__codelineno-0-373"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">django_forms</span><span class="o">.</span><span class="n">Textarea</span>
|
|
8397
|
+
<a id="__codelineno-0-374" name="__codelineno-0-374"></a> <span class="n">default_label</span> <span class="o">=</span> <span class="s2">""</span>
|
|
8398
|
+
<a id="__codelineno-0-375" name="__codelineno-0-375"></a> <span class="c1"># TODO: Port Markdown cheat sheet to internal documentation</span>
|
|
8399
|
+
<a id="__codelineno-0-376" name="__codelineno-0-376"></a> <span class="n">default_helptext</span> <span class="o">=</span> <span class="p">(</span>
|
|
8400
|
+
<a id="__codelineno-0-377" name="__codelineno-0-377"></a> <span class="s1">'<i class="mdi mdi-information-outline"></i> '</span>
|
|
8401
|
+
<a id="__codelineno-0-378" name="__codelineno-0-378"></a> <span class="s1">'<a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet" target="_blank">'</span>
|
|
8402
|
+
<a id="__codelineno-0-379" name="__codelineno-0-379"></a> <span class="s2">"Markdown</a> syntax is supported"</span>
|
|
8403
|
+
<a id="__codelineno-0-380" name="__codelineno-0-380"></a> <span class="p">)</span>
|
|
8404
|
+
<a id="__codelineno-0-381" name="__codelineno-0-381"></a>
|
|
8405
|
+
<a id="__codelineno-0-382" name="__codelineno-0-382"></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>
|
|
8406
|
+
<a id="__codelineno-0-383" name="__codelineno-0-383"></a> <span class="n">required</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"required"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
|
8407
|
+
<a id="__codelineno-0-384" name="__codelineno-0-384"></a> <span class="n">label</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"label"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_label</span><span class="p">)</span>
|
|
8408
|
+
<a id="__codelineno-0-385" name="__codelineno-0-385"></a> <span class="n">help_text</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"help_text"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_helptext</span><span class="p">)</span>
|
|
8409
|
+
<a id="__codelineno-0-386" name="__codelineno-0-386"></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="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">help_text</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>
|
|
8480
8410
|
</code></pre></div></td></tr></table></div>
|
|
8481
8411
|
</details>
|
|
8482
8412
|
|
|
@@ -8637,8 +8567,7 @@ part of a JSON/YAML DeviceType import.</p>
|
|
|
8637
8567
|
|
|
8638
8568
|
<details class="quote">
|
|
8639
8569
|
<summary>Source code in <code>nautobot/extras/forms/forms.py</code></summary>
|
|
8640
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
8641
|
-
<span class="normal"><a href="#__codelineno-0-415">415</a></span>
|
|
8570
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-415">415</a></span>
|
|
8642
8571
|
<span class="normal"><a href="#__codelineno-0-416">416</a></span>
|
|
8643
8572
|
<span class="normal"><a href="#__codelineno-0-417">417</a></span>
|
|
8644
8573
|
<span class="normal"><a href="#__codelineno-0-418">418</a></span>
|
|
@@ -8653,23 +8582,24 @@ part of a JSON/YAML DeviceType import.</p>
|
|
|
8653
8582
|
<span class="normal"><a href="#__codelineno-0-427">427</a></span>
|
|
8654
8583
|
<span class="normal"><a href="#__codelineno-0-428">428</a></span>
|
|
8655
8584
|
<span class="normal"><a href="#__codelineno-0-429">429</a></span>
|
|
8656
|
-
<span class="normal"><a href="#__codelineno-0-430">430</a></span
|
|
8657
|
-
<a id="__codelineno-0-415" name="__codelineno-0-415"></a><span class="
|
|
8658
|
-
<a id="__codelineno-0-416" name="__codelineno-0-416"></a><span class="
|
|
8659
|
-
<a id="__codelineno-0-417" name="__codelineno-0-417"></a>
|
|
8660
|
-
<a id="__codelineno-0-418" name="__codelineno-0-418"></a
|
|
8661
|
-
<a id="__codelineno-0-419" name="__codelineno-0-419"></a><span class="sd">
|
|
8662
|
-
<a id="__codelineno-0-420" name="__codelineno-0-420"></a><span class="sd">
|
|
8663
|
-
<a id="__codelineno-0-421" name="__codelineno-0-421"></a><span class="sd">
|
|
8664
|
-
<a id="__codelineno-0-422" name="__codelineno-0-422"></a>
|
|
8665
|
-
<a id="__codelineno-0-423" name="__codelineno-0-423"></a>
|
|
8666
|
-
<a id="__codelineno-0-424" name="__codelineno-0-424"></a>
|
|
8667
|
-
<a id="__codelineno-0-425" name="__codelineno-0-425"></a> <span class="
|
|
8668
|
-
<a id="__codelineno-0-426" name="__codelineno-0-426"></a>
|
|
8669
|
-
<a id="__codelineno-0-427" name="__codelineno-0-427"></a> <span class="
|
|
8670
|
-
<a id="__codelineno-0-428" name="__codelineno-0-428"></a>
|
|
8671
|
-
<a id="__codelineno-0-429" name="__codelineno-0-429"></a>
|
|
8672
|
-
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="
|
|
8585
|
+
<span class="normal"><a href="#__codelineno-0-430">430</a></span>
|
|
8586
|
+
<span class="normal"><a href="#__codelineno-0-431">431</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-415" name="__codelineno-0-415"></a><span class="k">class</span> <span class="nc">CustomFieldModelCSVForm</span><span class="p">(</span><span class="n">CSVModelForm</span><span class="p">,</span> <span class="n">CustomFieldModelFormMixin</span><span class="p">):</span>
|
|
8587
|
+
<a id="__codelineno-0-416" name="__codelineno-0-416"></a><span class="w"> </span><span class="sd">"""</span>
|
|
8588
|
+
<a id="__codelineno-0-417" name="__codelineno-0-417"></a><span class="sd"> Base class for CSV/JSON/YAML import of models that support custom fields.</span>
|
|
8589
|
+
<a id="__codelineno-0-418" name="__codelineno-0-418"></a>
|
|
8590
|
+
<a id="__codelineno-0-419" name="__codelineno-0-419"></a><span class="sd"> TODO: The class name is a misnomer; as of 2.0 this class is **not** used for any CSV imports,</span>
|
|
8591
|
+
<a id="__codelineno-0-420" name="__codelineno-0-420"></a><span class="sd"> as that's now handled by the REST API. However it is still used when importing component-templates as</span>
|
|
8592
|
+
<a id="__codelineno-0-421" name="__codelineno-0-421"></a><span class="sd"> part of a JSON/YAML DeviceType import.</span>
|
|
8593
|
+
<a id="__codelineno-0-422" name="__codelineno-0-422"></a><span class="sd"> """</span>
|
|
8594
|
+
<a id="__codelineno-0-423" name="__codelineno-0-423"></a>
|
|
8595
|
+
<a id="__codelineno-0-424" name="__codelineno-0-424"></a> <span class="k">def</span> <span class="nf">_append_customfield_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
8596
|
+
<a id="__codelineno-0-425" name="__codelineno-0-425"></a> <span class="c1"># Append form fields</span>
|
|
8597
|
+
<a id="__codelineno-0-426" name="__codelineno-0-426"></a> <span class="k">for</span> <span class="n">cf</span> <span class="ow">in</span> <span class="n">CustomField</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">content_types</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">obj_type</span><span class="p">):</span>
|
|
8598
|
+
<a id="__codelineno-0-427" name="__codelineno-0-427"></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">cf</span><span class="o">.</span><span class="n">add_prefix_to_cf_key</span><span class="p">()</span>
|
|
8599
|
+
<a id="__codelineno-0-428" name="__codelineno-0-428"></a> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">field_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">cf</span><span class="o">.</span><span class="n">to_form_field</span><span class="p">(</span><span class="n">for_csv_import</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
8600
|
+
<a id="__codelineno-0-429" name="__codelineno-0-429"></a>
|
|
8601
|
+
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="c1"># Annotate the field in the list of CustomField form fields</span>
|
|
8602
|
+
<a id="__codelineno-0-431" name="__codelineno-0-431"></a> <span class="bp">self</span><span class="o">.</span><span class="n">custom_fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">field_name</span><span class="p">)</span>
|
|
8673
8603
|
</code></pre></div></td></tr></table></div>
|
|
8674
8604
|
</details>
|
|
8675
8605
|
|
|
@@ -9276,7 +9206,9 @@ rendered only with choices set via bound data. Choices are populated on-demand v
|
|
|
9276
9206
|
|
|
9277
9207
|
<details class="quote">
|
|
9278
9208
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
9279
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9209
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-553">553</a></span>
|
|
9210
|
+
<span class="normal"><a href="#__codelineno-0-554">554</a></span>
|
|
9211
|
+
<span class="normal"><a href="#__codelineno-0-555">555</a></span>
|
|
9280
9212
|
<span class="normal"><a href="#__codelineno-0-556">556</a></span>
|
|
9281
9213
|
<span class="normal"><a href="#__codelineno-0-557">557</a></span>
|
|
9282
9214
|
<span class="normal"><a href="#__codelineno-0-558">558</a></span>
|
|
@@ -9287,22 +9219,20 @@ rendered only with choices set via bound data. Choices are populated on-demand v
|
|
|
9287
9219
|
<span class="normal"><a href="#__codelineno-0-563">563</a></span>
|
|
9288
9220
|
<span class="normal"><a href="#__codelineno-0-564">564</a></span>
|
|
9289
9221
|
<span class="normal"><a href="#__codelineno-0-565">565</a></span>
|
|
9290
|
-
<span class="normal"><a href="#__codelineno-0-566">566</a></span>
|
|
9291
|
-
<
|
|
9292
|
-
<
|
|
9293
|
-
<a id="__codelineno-0-556" name="__codelineno-0-556"></a><span class="
|
|
9294
|
-
<a id="__codelineno-0-557" name="__codelineno-0-557"></a><span class="sd">
|
|
9295
|
-
<a id="__codelineno-0-558" name="__codelineno-0-558"></a
|
|
9296
|
-
<a id="__codelineno-0-559" name="__codelineno-0-559"></a><span class="
|
|
9297
|
-
<a id="__codelineno-0-560" name="__codelineno-0-560"></a>
|
|
9298
|
-
<a id="__codelineno-0-561" name="__codelineno-0-561"></a
|
|
9299
|
-
<a id="__codelineno-0-562" name="__codelineno-0-562"></a><span class="
|
|
9300
|
-
<a id="__codelineno-0-563" name="__codelineno-0-563"></a><span class="sd">
|
|
9301
|
-
<a id="__codelineno-0-564" name="__codelineno-0-564"></a><span class="
|
|
9302
|
-
<a id="__codelineno-0-565" name="__codelineno-0-565"></a
|
|
9303
|
-
<a id="__codelineno-0-566" name="__codelineno-0-566"></a> <span class="k">
|
|
9304
|
-
<a id="__codelineno-0-567" name="__codelineno-0-567"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
9305
|
-
<a id="__codelineno-0-568" name="__codelineno-0-568"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
9222
|
+
<span class="normal"><a href="#__codelineno-0-566">566</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-553" name="__codelineno-0-553"></a><span class="k">class</span> <span class="nc">DynamicModelChoiceField</span><span class="p">(</span><span class="n">DynamicModelChoiceMixin</span><span class="p">,</span> <span class="n">django_forms</span><span class="o">.</span><span class="n">ModelChoiceField</span><span class="p">):</span>
|
|
9223
|
+
<a id="__codelineno-0-554" name="__codelineno-0-554"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9224
|
+
<a id="__codelineno-0-555" name="__codelineno-0-555"></a><span class="sd"> Override get_bound_field() to avoid pre-populating field choices with a SQL query. The field will be</span>
|
|
9225
|
+
<a id="__codelineno-0-556" name="__codelineno-0-556"></a><span class="sd"> rendered only with choices set via bound data. Choices are populated on-demand via the APISelect widget.</span>
|
|
9226
|
+
<a id="__codelineno-0-557" name="__codelineno-0-557"></a><span class="sd"> """</span>
|
|
9227
|
+
<a id="__codelineno-0-558" name="__codelineno-0-558"></a>
|
|
9228
|
+
<a id="__codelineno-0-559" name="__codelineno-0-559"></a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
9229
|
+
<a id="__codelineno-0-560" name="__codelineno-0-560"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9230
|
+
<a id="__codelineno-0-561" name="__codelineno-0-561"></a><span class="sd"> When null option is enabled and "None" is sent as part of a form to be submitted, it is sent as the</span>
|
|
9231
|
+
<a id="__codelineno-0-562" name="__codelineno-0-562"></a><span class="sd"> string 'null'. This will check for that condition and gracefully handle the conversion to a NoneType.</span>
|
|
9232
|
+
<a id="__codelineno-0-563" name="__codelineno-0-563"></a><span class="sd"> """</span>
|
|
9233
|
+
<a id="__codelineno-0-564" name="__codelineno-0-564"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_option</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">value</span> <span class="o">==</span> <span class="n">settings</span><span class="o">.</span><span class="n">FILTERS_NULL_CHOICE_VALUE</span><span class="p">:</span>
|
|
9234
|
+
<a id="__codelineno-0-565" name="__codelineno-0-565"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
9235
|
+
<a id="__codelineno-0-566" name="__codelineno-0-566"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
9306
9236
|
</code></pre></div></td></tr></table></div>
|
|
9307
9237
|
</details>
|
|
9308
9238
|
|
|
@@ -9336,21 +9266,21 @@ string 'null'. This will check for that condition and gracefully handle the con
|
|
|
9336
9266
|
|
|
9337
9267
|
<details class="quote">
|
|
9338
9268
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
9339
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9269
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-559">559</a></span>
|
|
9270
|
+
<span class="normal"><a href="#__codelineno-0-560">560</a></span>
|
|
9271
|
+
<span class="normal"><a href="#__codelineno-0-561">561</a></span>
|
|
9340
9272
|
<span class="normal"><a href="#__codelineno-0-562">562</a></span>
|
|
9341
9273
|
<span class="normal"><a href="#__codelineno-0-563">563</a></span>
|
|
9342
9274
|
<span class="normal"><a href="#__codelineno-0-564">564</a></span>
|
|
9343
9275
|
<span class="normal"><a href="#__codelineno-0-565">565</a></span>
|
|
9344
|
-
<span class="normal"><a href="#__codelineno-0-566">566</a></span>
|
|
9345
|
-
<
|
|
9346
|
-
<
|
|
9347
|
-
<a id="__codelineno-0-562" name="__codelineno-0-562"></a><span class="
|
|
9348
|
-
<a id="__codelineno-0-563" name="__codelineno-0-563"></a><span class="sd">
|
|
9349
|
-
<a id="__codelineno-0-564" name="__codelineno-0-564"></a><span class="
|
|
9350
|
-
<a id="__codelineno-0-565" name="__codelineno-0-565"></a
|
|
9351
|
-
<a id="__codelineno-0-566" name="__codelineno-0-566"></a> <span class="k">
|
|
9352
|
-
<a id="__codelineno-0-567" name="__codelineno-0-567"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
9353
|
-
<a id="__codelineno-0-568" name="__codelineno-0-568"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
9276
|
+
<span class="normal"><a href="#__codelineno-0-566">566</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-559" name="__codelineno-0-559"></a><span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
9277
|
+
<a id="__codelineno-0-560" name="__codelineno-0-560"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9278
|
+
<a id="__codelineno-0-561" name="__codelineno-0-561"></a><span class="sd"> When null option is enabled and "None" is sent as part of a form to be submitted, it is sent as the</span>
|
|
9279
|
+
<a id="__codelineno-0-562" name="__codelineno-0-562"></a><span class="sd"> string 'null'. This will check for that condition and gracefully handle the conversion to a NoneType.</span>
|
|
9280
|
+
<a id="__codelineno-0-563" name="__codelineno-0-563"></a><span class="sd"> """</span>
|
|
9281
|
+
<a id="__codelineno-0-564" name="__codelineno-0-564"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_option</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">value</span> <span class="o">==</span> <span class="n">settings</span><span class="o">.</span><span class="n">FILTERS_NULL_CHOICE_VALUE</span><span class="p">:</span>
|
|
9282
|
+
<a id="__codelineno-0-565" name="__codelineno-0-565"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
9283
|
+
<a id="__codelineno-0-566" name="__codelineno-0-566"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
9354
9284
|
</code></pre></div></td></tr></table></div>
|
|
9355
9285
|
</details>
|
|
9356
9286
|
</div>
|
|
@@ -9389,7 +9319,9 @@ string 'null'. This will check for that condition and gracefully handle the con
|
|
|
9389
9319
|
|
|
9390
9320
|
<details class="quote">
|
|
9391
9321
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
9392
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9322
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-437">437</a></span>
|
|
9323
|
+
<span class="normal"><a href="#__codelineno-0-438">438</a></span>
|
|
9324
|
+
<span class="normal"><a href="#__codelineno-0-439">439</a></span>
|
|
9393
9325
|
<span class="normal"><a href="#__codelineno-0-440">440</a></span>
|
|
9394
9326
|
<span class="normal"><a href="#__codelineno-0-441">441</a></span>
|
|
9395
9327
|
<span class="normal"><a href="#__codelineno-0-442">442</a></span>
|
|
@@ -9500,122 +9432,120 @@ string 'null'. This will check for that condition and gracefully handle the con
|
|
|
9500
9432
|
<span class="normal"><a href="#__codelineno-0-547">547</a></span>
|
|
9501
9433
|
<span class="normal"><a href="#__codelineno-0-548">548</a></span>
|
|
9502
9434
|
<span class="normal"><a href="#__codelineno-0-549">549</a></span>
|
|
9503
|
-
<span class="normal"><a href="#__codelineno-0-550">550</a></span>
|
|
9504
|
-
<
|
|
9505
|
-
<
|
|
9506
|
-
<a id="__codelineno-0-440" name="__codelineno-0-440"></a><span class="
|
|
9507
|
-
<a id="__codelineno-0-441" name="__codelineno-0-441"></a><span class="sd"> :param
|
|
9508
|
-
<a id="__codelineno-0-442" name="__codelineno-0-442"></a><span class="sd"> :param
|
|
9509
|
-
<a id="__codelineno-0-443" name="__codelineno-0-443"></a><span class="sd"> :param
|
|
9510
|
-
<a id="__codelineno-0-444" name="__codelineno-0-444"></a><span class="sd">
|
|
9511
|
-
<a id="__codelineno-0-445" name="__codelineno-0-445"></a><span class="sd"> :param
|
|
9512
|
-
<a id="__codelineno-0-446" name="__codelineno-0-446"></a><span class="sd">
|
|
9513
|
-
<a id="__codelineno-0-447" name="__codelineno-0-447"></a
|
|
9514
|
-
<a id="__codelineno-0-448" name="__codelineno-0-448"></a><span class="
|
|
9515
|
-
<a id="__codelineno-0-449" name="__codelineno-0-449"></a>
|
|
9516
|
-
<a id="__codelineno-0-450" name="__codelineno-0-450"></a>
|
|
9517
|
-
<a id="__codelineno-0-451" name="__codelineno-0-451"></a> <span class="
|
|
9518
|
-
<a id="__codelineno-0-452" name="__codelineno-0-452"></a>
|
|
9519
|
-
<a id="__codelineno-0-453" name="__codelineno-0-453"></a>
|
|
9520
|
-
<a id="__codelineno-0-454" name="__codelineno-0-454"></a> <span class="
|
|
9521
|
-
<a id="__codelineno-0-455" name="__codelineno-0-455"></a> <span class="n">
|
|
9522
|
-
<a id="__codelineno-0-456" name="__codelineno-0-456"></a> <span class="n">
|
|
9523
|
-
<a id="__codelineno-0-457" name="__codelineno-0-457"></a> <span class="n">
|
|
9524
|
-
<a id="__codelineno-0-458" name="__codelineno-0-458"></a> <span class="n">
|
|
9525
|
-
<a id="__codelineno-0-459" name="__codelineno-0-459"></a> <span class="
|
|
9526
|
-
<a id="__codelineno-0-460" name="__codelineno-0-460"></a> <span class="
|
|
9527
|
-
<a id="__codelineno-0-461" name="__codelineno-0-461"></a>
|
|
9528
|
-
<a id="__codelineno-0-462" name="__codelineno-0-462"></a> <span class="o"
|
|
9529
|
-
<a id="__codelineno-0-463" name="__codelineno-0-463"></a>
|
|
9530
|
-
<a id="__codelineno-0-464" name="__codelineno-0-464"></a> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
9531
|
-
<a id="__codelineno-0-465" name="__codelineno-0-465"></a> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
9532
|
-
<a id="__codelineno-0-466" name="__codelineno-0-466"></a> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
9533
|
-
<a id="__codelineno-0-467" name="__codelineno-0-467"></a> <span class="bp">self</span><span class="o">.</span><span class="n">
|
|
9534
|
-
<a id="__codelineno-0-468" name="__codelineno-0-468"></a>
|
|
9535
|
-
<a id="__codelineno-0-469" name="__codelineno-0-469"></a> <span class="
|
|
9536
|
-
<a id="__codelineno-0-470" name="__codelineno-0-470"></a>
|
|
9537
|
-
<a id="__codelineno-0-471" name="__codelineno-0-471"></a> <span class="
|
|
9538
|
-
<a id="__codelineno-0-472" name="__codelineno-0-472"></a>
|
|
9539
|
-
<a id="__codelineno-0-473" name="__codelineno-0-473"></a> <span class="
|
|
9435
|
+
<span class="normal"><a href="#__codelineno-0-550">550</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-437" name="__codelineno-0-437"></a><span class="k">class</span> <span class="nc">DynamicModelChoiceMixin</span><span class="p">:</span>
|
|
9436
|
+
<a id="__codelineno-0-438" name="__codelineno-0-438"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9437
|
+
<a id="__codelineno-0-439" name="__codelineno-0-439"></a><span class="sd"> :param display_field: The name of the attribute of an API response object to display in the selection list</span>
|
|
9438
|
+
<a id="__codelineno-0-440" name="__codelineno-0-440"></a><span class="sd"> :param query_params: A dictionary of additional key/value pairs to attach to the API request</span>
|
|
9439
|
+
<a id="__codelineno-0-441" name="__codelineno-0-441"></a><span class="sd"> :param initial_params: A dictionary of child field references to use for selecting a parent field's initial value</span>
|
|
9440
|
+
<a id="__codelineno-0-442" name="__codelineno-0-442"></a><span class="sd"> :param null_option: The string used to represent a null selection (if any)</span>
|
|
9441
|
+
<a id="__codelineno-0-443" name="__codelineno-0-443"></a><span class="sd"> :param disabled_indicator: The name of the field which, if populated, will disable selection of the</span>
|
|
9442
|
+
<a id="__codelineno-0-444" name="__codelineno-0-444"></a><span class="sd"> choice (optional)</span>
|
|
9443
|
+
<a id="__codelineno-0-445" name="__codelineno-0-445"></a><span class="sd"> :param depth: Nested serialization depth when making API requests (default: `0` or a flat representation)</span>
|
|
9444
|
+
<a id="__codelineno-0-446" name="__codelineno-0-446"></a><span class="sd"> """</span>
|
|
9445
|
+
<a id="__codelineno-0-447" name="__codelineno-0-447"></a>
|
|
9446
|
+
<a id="__codelineno-0-448" name="__codelineno-0-448"></a> <span class="nb">filter</span> <span class="o">=</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">ModelChoiceFilter</span> <span class="c1"># 2.0 TODO(Glenn): can we rename this? pylint: disable=redefined-builtin</span>
|
|
9447
|
+
<a id="__codelineno-0-449" name="__codelineno-0-449"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">widgets</span><span class="o">.</span><span class="n">APISelect</span>
|
|
9448
|
+
<a id="__codelineno-0-450" name="__codelineno-0-450"></a>
|
|
9449
|
+
<a id="__codelineno-0-451" name="__codelineno-0-451"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
|
9450
|
+
<a id="__codelineno-0-452" name="__codelineno-0-452"></a> <span class="bp">self</span><span class="p">,</span>
|
|
9451
|
+
<a id="__codelineno-0-453" name="__codelineno-0-453"></a> <span class="n">display_field</span><span class="o">=</span><span class="s2">"display"</span><span class="p">,</span>
|
|
9452
|
+
<a id="__codelineno-0-454" name="__codelineno-0-454"></a> <span class="n">query_params</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
9453
|
+
<a id="__codelineno-0-455" name="__codelineno-0-455"></a> <span class="n">initial_params</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
9454
|
+
<a id="__codelineno-0-456" name="__codelineno-0-456"></a> <span class="n">null_option</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
9455
|
+
<a id="__codelineno-0-457" name="__codelineno-0-457"></a> <span class="n">disabled_indicator</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
9456
|
+
<a id="__codelineno-0-458" name="__codelineno-0-458"></a> <span class="n">depth</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
|
9457
|
+
<a id="__codelineno-0-459" name="__codelineno-0-459"></a> <span class="o">*</span><span class="n">args</span><span class="p">,</span>
|
|
9458
|
+
<a id="__codelineno-0-460" name="__codelineno-0-460"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
9459
|
+
<a id="__codelineno-0-461" name="__codelineno-0-461"></a> <span class="p">):</span>
|
|
9460
|
+
<a id="__codelineno-0-462" name="__codelineno-0-462"></a> <span class="bp">self</span><span class="o">.</span><span class="n">display_field</span> <span class="o">=</span> <span class="n">display_field</span>
|
|
9461
|
+
<a id="__codelineno-0-463" name="__codelineno-0-463"></a> <span class="bp">self</span><span class="o">.</span><span class="n">query_params</span> <span class="o">=</span> <span class="n">query_params</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
9462
|
+
<a id="__codelineno-0-464" name="__codelineno-0-464"></a> <span class="bp">self</span><span class="o">.</span><span class="n">initial_params</span> <span class="o">=</span> <span class="n">initial_params</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
9463
|
+
<a id="__codelineno-0-465" name="__codelineno-0-465"></a> <span class="bp">self</span><span class="o">.</span><span class="n">null_option</span> <span class="o">=</span> <span class="n">null_option</span>
|
|
9464
|
+
<a id="__codelineno-0-466" name="__codelineno-0-466"></a> <span class="bp">self</span><span class="o">.</span><span class="n">disabled_indicator</span> <span class="o">=</span> <span class="n">disabled_indicator</span>
|
|
9465
|
+
<a id="__codelineno-0-467" name="__codelineno-0-467"></a> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span> <span class="o">=</span> <span class="n">depth</span>
|
|
9466
|
+
<a id="__codelineno-0-468" name="__codelineno-0-468"></a>
|
|
9467
|
+
<a id="__codelineno-0-469" name="__codelineno-0-469"></a> <span class="c1"># to_field_name is set by ModelChoiceField.__init__(), but we need to set it early for reference</span>
|
|
9468
|
+
<a id="__codelineno-0-470" name="__codelineno-0-470"></a> <span class="c1"># by widget_attrs()</span>
|
|
9469
|
+
<a id="__codelineno-0-471" name="__codelineno-0-471"></a> <span class="bp">self</span><span class="o">.</span><span class="n">to_field_name</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"to_field_name"</span><span class="p">)</span>
|
|
9470
|
+
<a id="__codelineno-0-472" name="__codelineno-0-472"></a>
|
|
9471
|
+
<a id="__codelineno-0-473" name="__codelineno-0-473"></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>
|
|
9540
9472
|
<a id="__codelineno-0-474" name="__codelineno-0-474"></a>
|
|
9541
|
-
<a id="__codelineno-0-475" name="__codelineno-0-475"></a>
|
|
9542
|
-
<a id="__codelineno-0-476" name="__codelineno-0-476"></a>
|
|
9543
|
-
<a id="__codelineno-0-477" name="__codelineno-0-477"></a>
|
|
9544
|
-
<a id="__codelineno-0-478" name="__codelineno-0-478"></a> <span class="
|
|
9545
|
-
<a id="__codelineno-0-479" name="__codelineno-0-479"></a>
|
|
9546
|
-
<a id="__codelineno-0-480" name="__codelineno-0-480"></a> <span class="
|
|
9547
|
-
<a id="__codelineno-0-481" name="__codelineno-0-481"></a>
|
|
9548
|
-
<a id="__codelineno-0-482" name="__codelineno-0-482"></a>
|
|
9549
|
-
<a id="__codelineno-0-483" name="__codelineno-0-483"></a>
|
|
9550
|
-
<a id="__codelineno-0-484" name="__codelineno-0-484"></a>
|
|
9551
|
-
<a id="__codelineno-0-485" name="__codelineno-0-485"></a>
|
|
9552
|
-
<a id="__codelineno-0-486" name="__codelineno-0-486"></a>
|
|
9553
|
-
<a id="__codelineno-0-487" name="__codelineno-0-487"></a>
|
|
9554
|
-
<a id="__codelineno-0-488" name="__codelineno-0-488"></a>
|
|
9555
|
-
<a id="__codelineno-0-489" name="__codelineno-0-489"></a>
|
|
9556
|
-
<a id="__codelineno-0-490" name="__codelineno-0-490"></a>
|
|
9557
|
-
<a id="__codelineno-0-491" name="__codelineno-0-491"></a>
|
|
9558
|
-
<a id="__codelineno-0-492" name="__codelineno-0-492"></a>
|
|
9559
|
-
<a id="__codelineno-0-493" name="__codelineno-0-493"></a>
|
|
9560
|
-
<a id="__codelineno-0-494" name="__codelineno-0-494"></a>
|
|
9561
|
-
<a id="__codelineno-0-495" name="__codelineno-0-495"></a> <span class="
|
|
9562
|
-
<a id="__codelineno-0-496" name="__codelineno-0-496"></a>
|
|
9563
|
-
<a id="__codelineno-0-497" name="__codelineno-0-497"></a>
|
|
9564
|
-
<a id="__codelineno-0-498" name="__codelineno-0-498"></a>
|
|
9565
|
-
<a id="__codelineno-0-499" name="__codelineno-0-499"></a>
|
|
9473
|
+
<a id="__codelineno-0-475" name="__codelineno-0-475"></a> <span class="k">def</span> <span class="nf">widget_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span>
|
|
9474
|
+
<a id="__codelineno-0-476" name="__codelineno-0-476"></a> <span class="n">attrs</span> <span class="o">=</span> <span class="p">{</span>
|
|
9475
|
+
<a id="__codelineno-0-477" name="__codelineno-0-477"></a> <span class="s2">"display-field"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_field</span><span class="p">,</span>
|
|
9476
|
+
<a id="__codelineno-0-478" name="__codelineno-0-478"></a> <span class="p">}</span>
|
|
9477
|
+
<a id="__codelineno-0-479" name="__codelineno-0-479"></a>
|
|
9478
|
+
<a id="__codelineno-0-480" name="__codelineno-0-480"></a> <span class="c1"># Set value-field attribute if the field specifies to_field_name</span>
|
|
9479
|
+
<a id="__codelineno-0-481" name="__codelineno-0-481"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_field_name</span><span class="p">:</span>
|
|
9480
|
+
<a id="__codelineno-0-482" name="__codelineno-0-482"></a> <span class="n">attrs</span><span class="p">[</span><span class="s2">"value-field"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_field_name</span>
|
|
9481
|
+
<a id="__codelineno-0-483" name="__codelineno-0-483"></a>
|
|
9482
|
+
<a id="__codelineno-0-484" name="__codelineno-0-484"></a> <span class="c1"># Set the string used to represent a null option</span>
|
|
9483
|
+
<a id="__codelineno-0-485" name="__codelineno-0-485"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_option</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
9484
|
+
<a id="__codelineno-0-486" name="__codelineno-0-486"></a> <span class="n">attrs</span><span class="p">[</span><span class="s2">"data-null-option"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_option</span>
|
|
9485
|
+
<a id="__codelineno-0-487" name="__codelineno-0-487"></a>
|
|
9486
|
+
<a id="__codelineno-0-488" name="__codelineno-0-488"></a> <span class="c1"># Set the disabled indicator, if any</span>
|
|
9487
|
+
<a id="__codelineno-0-489" name="__codelineno-0-489"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">disabled_indicator</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
9488
|
+
<a id="__codelineno-0-490" name="__codelineno-0-490"></a> <span class="n">attrs</span><span class="p">[</span><span class="s2">"disabled-indicator"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">disabled_indicator</span>
|
|
9489
|
+
<a id="__codelineno-0-491" name="__codelineno-0-491"></a>
|
|
9490
|
+
<a id="__codelineno-0-492" name="__codelineno-0-492"></a> <span class="c1"># Toggle depth</span>
|
|
9491
|
+
<a id="__codelineno-0-493" name="__codelineno-0-493"></a> <span class="n">attrs</span><span class="p">[</span><span class="s2">"data-depth"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span>
|
|
9492
|
+
<a id="__codelineno-0-494" name="__codelineno-0-494"></a>
|
|
9493
|
+
<a id="__codelineno-0-495" name="__codelineno-0-495"></a> <span class="c1"># Attach any static query parameters</span>
|
|
9494
|
+
<a id="__codelineno-0-496" name="__codelineno-0-496"></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_params</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
9495
|
+
<a id="__codelineno-0-497" name="__codelineno-0-497"></a> <span class="n">widget</span><span class="o">.</span><span class="n">add_query_param</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
9496
|
+
<a id="__codelineno-0-498" name="__codelineno-0-498"></a>
|
|
9497
|
+
<a id="__codelineno-0-499" name="__codelineno-0-499"></a> <span class="k">return</span> <span class="n">attrs</span>
|
|
9566
9498
|
<a id="__codelineno-0-500" name="__codelineno-0-500"></a>
|
|
9567
|
-
<a id="__codelineno-0-501" name="__codelineno-0-501"></a>
|
|
9568
|
-
<a id="__codelineno-0-502" name="__codelineno-0-502"></a>
|
|
9569
|
-
<a id="__codelineno-0-503" name="__codelineno-0-503"></a
|
|
9570
|
-
<a id="__codelineno-0-504" name="__codelineno-0-504"></a
|
|
9571
|
-
<a id="__codelineno-0-505" name="__codelineno-0-505"></a><span class="sd">
|
|
9572
|
-
<a id="__codelineno-0-506" name="__codelineno-0-506"></a>
|
|
9573
|
-
<a id="__codelineno-0-507" name="__codelineno-0-507"></a><span class="sd">
|
|
9574
|
-
<a id="__codelineno-0-508" name="__codelineno-0-508"></a><span class="sd">
|
|
9575
|
-
<a id="__codelineno-0-509" name="__codelineno-0-509"></a
|
|
9576
|
-
<a id="__codelineno-0-510" name="__codelineno-0-510"></a
|
|
9577
|
-
<a id="__codelineno-0-511" name="__codelineno-0-511"></a>
|
|
9578
|
-
<a id="__codelineno-0-512" name="__codelineno-0-512"></a> <span class="k">
|
|
9579
|
-
<a id="__codelineno-0-513" name="__codelineno-0-513"></a> <span class="
|
|
9580
|
-
<a id="__codelineno-0-514" name="__codelineno-0-514"></a>
|
|
9581
|
-
<a id="__codelineno-0-515" name="__codelineno-0-515"></a>
|
|
9582
|
-
<a id="__codelineno-0-516" name="__codelineno-0-516"></a>
|
|
9583
|
-
<a id="__codelineno-0-517" name="__codelineno-0-517"></a>
|
|
9584
|
-
<a id="__codelineno-0-518" name="__codelineno-0-518"></a>
|
|
9585
|
-
<a id="__codelineno-0-519" name="__codelineno-0-519"></a> <span class="
|
|
9586
|
-
<a id="__codelineno-0-520" name="__codelineno-0-520"></a>
|
|
9587
|
-
<a id="__codelineno-0-521" name="__codelineno-0-521"></a>
|
|
9588
|
-
<a id="__codelineno-0-522" name="__codelineno-0-522"></a>
|
|
9589
|
-
<a id="__codelineno-0-523" name="__codelineno-0-523"></a>
|
|
9590
|
-
<a id="__codelineno-0-524" name="__codelineno-0-524"></a>
|
|
9591
|
-
<a id="__codelineno-0-525" name="__codelineno-0-525"></a>
|
|
9592
|
-
<a id="__codelineno-0-526" name="__codelineno-0-526"></a>
|
|
9593
|
-
<a id="__codelineno-0-527" name="__codelineno-0-527"></a>
|
|
9594
|
-
<a id="__codelineno-0-528" name="__codelineno-0-528"></a>
|
|
9595
|
-
<a id="__codelineno-0-529" name="__codelineno-0-529"></a>
|
|
9596
|
-
<a id="__codelineno-0-530" name="__codelineno-0-530"></a>
|
|
9597
|
-
<a id="__codelineno-0-531" name="__codelineno-0-531"></a> <span class="
|
|
9598
|
-
<a id="__codelineno-0-532" name="__codelineno-0-532"></a> <span class="
|
|
9599
|
-
<a id="__codelineno-0-533" name="__codelineno-0-533"></a>
|
|
9600
|
-
<a id="__codelineno-0-534" name="__codelineno-0-534"></a>
|
|
9601
|
-
<a id="__codelineno-0-535" name="__codelineno-0-535"></a> <span class="
|
|
9602
|
-
<a id="__codelineno-0-536" name="__codelineno-0-536"></a>
|
|
9603
|
-
<a id="__codelineno-0-537" name="__codelineno-0-537"></a> <span class="k">
|
|
9604
|
-
<a id="__codelineno-0-538" name="__codelineno-0-538"></a> <span class="
|
|
9605
|
-
<a id="__codelineno-0-539" name="__codelineno-0-539"></a>
|
|
9606
|
-
<a id="__codelineno-0-540" name="__codelineno-0-540"></a>
|
|
9607
|
-
<a id="__codelineno-0-541" name="__codelineno-0-541"></a>
|
|
9608
|
-
<a id="__codelineno-0-542" name="__codelineno-0-542"></a>
|
|
9609
|
-
<a id="__codelineno-0-543" name="__codelineno-0-543"></a>
|
|
9610
|
-
<a id="__codelineno-0-544" name="__codelineno-0-544"></a>
|
|
9611
|
-
<a id="__codelineno-0-545" name="__codelineno-0-545"></a> <span class="
|
|
9612
|
-
<a id="__codelineno-0-546" name="__codelineno-0-546"></a>
|
|
9613
|
-
<a id="__codelineno-0-547" name="__codelineno-0-547"></a>
|
|
9614
|
-
<a id="__codelineno-0-548" name="__codelineno-0-548"></a> <span class="n">
|
|
9615
|
-
<a id="__codelineno-0-549" name="__codelineno-0-549"></a>
|
|
9616
|
-
<a id="__codelineno-0-550" name="__codelineno-0-550"></a>
|
|
9617
|
-
<a id="__codelineno-0-551" name="__codelineno-0-551"></a>
|
|
9618
|
-
<a id="__codelineno-0-552" name="__codelineno-0-552"></a> <span class="k">return</span> <span class="n">bound_field</span>
|
|
9499
|
+
<a id="__codelineno-0-501" name="__codelineno-0-501"></a> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
9500
|
+
<a id="__codelineno-0-502" name="__codelineno-0-502"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9501
|
+
<a id="__codelineno-0-503" name="__codelineno-0-503"></a><span class="sd"> Augment the behavior of forms.ModelChoiceField.prepare_value().</span>
|
|
9502
|
+
<a id="__codelineno-0-504" name="__codelineno-0-504"></a>
|
|
9503
|
+
<a id="__codelineno-0-505" name="__codelineno-0-505"></a><span class="sd"> Specifically, if `value` is a PK, but we have `to_field_name` set, we need to look up the model instance</span>
|
|
9504
|
+
<a id="__codelineno-0-506" name="__codelineno-0-506"></a><span class="sd"> from the given PK, so that the base class will get the appropriate field value rather than just keeping the PK,</span>
|
|
9505
|
+
<a id="__codelineno-0-507" name="__codelineno-0-507"></a><span class="sd"> because the rendered form field needs this in order to correctly prepopulate a default selection.</span>
|
|
9506
|
+
<a id="__codelineno-0-508" name="__codelineno-0-508"></a><span class="sd"> """</span>
|
|
9507
|
+
<a id="__codelineno-0-509" name="__codelineno-0-509"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_field_name</span> <span class="ow">and</span> <span class="n">data_utils</span><span class="o">.</span><span class="n">is_uuid</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
|
9508
|
+
<a id="__codelineno-0-510" name="__codelineno-0-510"></a> <span class="k">try</span><span class="p">:</span>
|
|
9509
|
+
<a id="__codelineno-0-511" name="__codelineno-0-511"></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
|
|
9510
|
+
<a id="__codelineno-0-512" name="__codelineno-0-512"></a> <span class="k">except</span> <span class="n">ObjectDoesNotExist</span><span class="p">:</span>
|
|
9511
|
+
<a id="__codelineno-0-513" name="__codelineno-0-513"></a> <span class="k">pass</span>
|
|
9512
|
+
<a id="__codelineno-0-514" name="__codelineno-0-514"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
9513
|
+
<a id="__codelineno-0-515" name="__codelineno-0-515"></a>
|
|
9514
|
+
<a id="__codelineno-0-516" name="__codelineno-0-516"></a> <span class="k">def</span> <span class="nf">get_bound_field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">form</span><span class="p">,</span> <span class="n">field_name</span><span class="p">):</span>
|
|
9515
|
+
<a id="__codelineno-0-517" name="__codelineno-0-517"></a> <span class="n">bound_field</span> <span class="o">=</span> <span class="n">BoundField</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">field_name</span><span class="p">)</span>
|
|
9516
|
+
<a id="__codelineno-0-518" name="__codelineno-0-518"></a>
|
|
9517
|
+
<a id="__codelineno-0-519" name="__codelineno-0-519"></a> <span class="c1"># Set initial value based on prescribed child fields (if not already set)</span>
|
|
9518
|
+
<a id="__codelineno-0-520" name="__codelineno-0-520"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial_params</span><span class="p">:</span>
|
|
9519
|
+
<a id="__codelineno-0-521" name="__codelineno-0-521"></a> <span class="n">filter_kwargs</span> <span class="o">=</span> <span class="p">{}</span>
|
|
9520
|
+
<a id="__codelineno-0-522" name="__codelineno-0-522"></a> <span class="k">for</span> <span class="n">kwarg</span><span class="p">,</span> <span class="n">child_field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial_params</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
9521
|
+
<a id="__codelineno-0-523" name="__codelineno-0-523"></a> <span class="n">value</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">initial</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">child_field</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"$"</span><span class="p">))</span>
|
|
9522
|
+
<a id="__codelineno-0-524" name="__codelineno-0-524"></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
|
|
9523
|
+
<a id="__codelineno-0-525" name="__codelineno-0-525"></a> <span class="n">filter_kwargs</span><span class="p">[</span><span class="n">kwarg</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
|
9524
|
+
<a id="__codelineno-0-526" name="__codelineno-0-526"></a> <span class="k">if</span> <span class="n">filter_kwargs</span><span class="p">:</span>
|
|
9525
|
+
<a id="__codelineno-0-527" name="__codelineno-0-527"></a> <span class="bp">self</span><span class="o">.</span><span class="n">initial</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="o">**</span><span class="n">filter_kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
|
|
9526
|
+
<a id="__codelineno-0-528" name="__codelineno-0-528"></a>
|
|
9527
|
+
<a id="__codelineno-0-529" name="__codelineno-0-529"></a> <span class="c1"># Modify the QuerySet of the field before we return it. Limit choices to any data already bound: Options</span>
|
|
9528
|
+
<a id="__codelineno-0-530" name="__codelineno-0-530"></a> <span class="c1"># will be populated on-demand via the APISelect widget.</span>
|
|
9529
|
+
<a id="__codelineno-0-531" name="__codelineno-0-531"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">bound_field</span><span class="o">.</span><span class="n">value</span><span class="p">()</span>
|
|
9530
|
+
<a id="__codelineno-0-532" name="__codelineno-0-532"></a> <span class="k">if</span> <span class="n">data</span><span class="p">:</span>
|
|
9531
|
+
<a id="__codelineno-0-533" name="__codelineno-0-533"></a> <span class="n">field_name</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="s2">"to_field_name"</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"pk"</span>
|
|
9532
|
+
<a id="__codelineno-0-534" name="__codelineno-0-534"></a> <span class="n">filter_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">field_name</span><span class="o">=</span><span class="n">field_name</span><span class="p">)</span>
|
|
9533
|
+
<a id="__codelineno-0-535" name="__codelineno-0-535"></a> <span class="k">try</span><span class="p">:</span>
|
|
9534
|
+
<a id="__codelineno-0-536" name="__codelineno-0-536"></a> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span> <span class="o">=</span> <span class="n">filter_</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
|
9535
|
+
<a id="__codelineno-0-537" name="__codelineno-0-537"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="n">ValidationError</span><span class="p">):</span>
|
|
9536
|
+
<a id="__codelineno-0-538" name="__codelineno-0-538"></a> <span class="c1"># Catch any error caused by invalid initial data passed from the user</span>
|
|
9537
|
+
<a id="__codelineno-0-539" name="__codelineno-0-539"></a> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
|
9538
|
+
<a id="__codelineno-0-540" name="__codelineno-0-540"></a> <span class="k">else</span><span class="p">:</span>
|
|
9539
|
+
<a id="__codelineno-0-541" name="__codelineno-0-541"></a> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
|
9540
|
+
<a id="__codelineno-0-542" name="__codelineno-0-542"></a>
|
|
9541
|
+
<a id="__codelineno-0-543" name="__codelineno-0-543"></a> <span class="c1"># Set the data URL on the APISelect widget (if not already set)</span>
|
|
9542
|
+
<a id="__codelineno-0-544" name="__codelineno-0-544"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">bound_field</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">widget</span>
|
|
9543
|
+
<a id="__codelineno-0-545" name="__codelineno-0-545"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"data-url"</span><span class="p">):</span>
|
|
9544
|
+
<a id="__codelineno-0-546" name="__codelineno-0-546"></a> <span class="n">route</span> <span class="o">=</span> <span class="n">lookup</span><span class="o">.</span><span class="n">get_route_for_model</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">model</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
9545
|
+
<a id="__codelineno-0-547" name="__codelineno-0-547"></a> <span class="n">data_url</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="n">route</span><span class="p">)</span>
|
|
9546
|
+
<a id="__codelineno-0-548" name="__codelineno-0-548"></a> <span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s2">"data-url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">data_url</span>
|
|
9547
|
+
<a id="__codelineno-0-549" name="__codelineno-0-549"></a>
|
|
9548
|
+
<a id="__codelineno-0-550" name="__codelineno-0-550"></a> <span class="k">return</span> <span class="n">bound_field</span>
|
|
9619
9549
|
</code></pre></div></td></tr></table></div>
|
|
9620
9550
|
</details>
|
|
9621
9551
|
|
|
@@ -9651,7 +9581,9 @@ because the rendered form field needs this in order to correctly prepopulate a d
|
|
|
9651
9581
|
|
|
9652
9582
|
<details class="quote">
|
|
9653
9583
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
9654
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9584
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-501">501</a></span>
|
|
9585
|
+
<span class="normal"><a href="#__codelineno-0-502">502</a></span>
|
|
9586
|
+
<span class="normal"><a href="#__codelineno-0-503">503</a></span>
|
|
9655
9587
|
<span class="normal"><a href="#__codelineno-0-504">504</a></span>
|
|
9656
9588
|
<span class="normal"><a href="#__codelineno-0-505">505</a></span>
|
|
9657
9589
|
<span class="normal"><a href="#__codelineno-0-506">506</a></span>
|
|
@@ -9662,22 +9594,20 @@ because the rendered form field needs this in order to correctly prepopulate a d
|
|
|
9662
9594
|
<span class="normal"><a href="#__codelineno-0-511">511</a></span>
|
|
9663
9595
|
<span class="normal"><a href="#__codelineno-0-512">512</a></span>
|
|
9664
9596
|
<span class="normal"><a href="#__codelineno-0-513">513</a></span>
|
|
9665
|
-
<span class="normal"><a href="#__codelineno-0-514">514</a></span>
|
|
9666
|
-
<
|
|
9667
|
-
<
|
|
9668
|
-
<a id="__codelineno-0-504" name="__codelineno-0-504"></a
|
|
9669
|
-
<a id="__codelineno-0-505" name="__codelineno-0-505"></a><span class="sd">
|
|
9670
|
-
<a id="__codelineno-0-506" name="__codelineno-0-506"></a>
|
|
9671
|
-
<a id="__codelineno-0-507" name="__codelineno-0-507"></a><span class="sd">
|
|
9672
|
-
<a id="__codelineno-0-508" name="__codelineno-0-508"></a><span class="sd">
|
|
9673
|
-
<a id="__codelineno-0-509" name="__codelineno-0-509"></a
|
|
9674
|
-
<a id="__codelineno-0-510" name="__codelineno-0-510"></a
|
|
9675
|
-
<a id="__codelineno-0-511" name="__codelineno-0-511"></a>
|
|
9676
|
-
<a id="__codelineno-0-512" name="__codelineno-0-512"></a> <span class="k">
|
|
9677
|
-
<a id="__codelineno-0-513" name="__codelineno-0-513"></a> <span class="
|
|
9678
|
-
<a id="__codelineno-0-514" name="__codelineno-0-514"></a>
|
|
9679
|
-
<a id="__codelineno-0-515" name="__codelineno-0-515"></a> <span class="k">pass</span>
|
|
9680
|
-
<a id="__codelineno-0-516" name="__codelineno-0-516"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
9597
|
+
<span class="normal"><a href="#__codelineno-0-514">514</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-501" name="__codelineno-0-501"></a><span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
9598
|
+
<a id="__codelineno-0-502" name="__codelineno-0-502"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9599
|
+
<a id="__codelineno-0-503" name="__codelineno-0-503"></a><span class="sd"> Augment the behavior of forms.ModelChoiceField.prepare_value().</span>
|
|
9600
|
+
<a id="__codelineno-0-504" name="__codelineno-0-504"></a>
|
|
9601
|
+
<a id="__codelineno-0-505" name="__codelineno-0-505"></a><span class="sd"> Specifically, if `value` is a PK, but we have `to_field_name` set, we need to look up the model instance</span>
|
|
9602
|
+
<a id="__codelineno-0-506" name="__codelineno-0-506"></a><span class="sd"> from the given PK, so that the base class will get the appropriate field value rather than just keeping the PK,</span>
|
|
9603
|
+
<a id="__codelineno-0-507" name="__codelineno-0-507"></a><span class="sd"> because the rendered form field needs this in order to correctly prepopulate a default selection.</span>
|
|
9604
|
+
<a id="__codelineno-0-508" name="__codelineno-0-508"></a><span class="sd"> """</span>
|
|
9605
|
+
<a id="__codelineno-0-509" name="__codelineno-0-509"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_field_name</span> <span class="ow">and</span> <span class="n">data_utils</span><span class="o">.</span><span class="n">is_uuid</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
|
9606
|
+
<a id="__codelineno-0-510" name="__codelineno-0-510"></a> <span class="k">try</span><span class="p">:</span>
|
|
9607
|
+
<a id="__codelineno-0-511" name="__codelineno-0-511"></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
|
|
9608
|
+
<a id="__codelineno-0-512" name="__codelineno-0-512"></a> <span class="k">except</span> <span class="n">ObjectDoesNotExist</span><span class="p">:</span>
|
|
9609
|
+
<a id="__codelineno-0-513" name="__codelineno-0-513"></a> <span class="k">pass</span>
|
|
9610
|
+
<a id="__codelineno-0-514" name="__codelineno-0-514"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">prepare_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
9681
9611
|
</code></pre></div></td></tr></table></div>
|
|
9682
9612
|
</details>
|
|
9683
9613
|
</div>
|
|
@@ -9712,19 +9642,19 @@ because the rendered form field needs this in order to correctly prepopulate a d
|
|
|
9712
9642
|
|
|
9713
9643
|
<details class="quote">
|
|
9714
9644
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
9715
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9645
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-569">569</a></span>
|
|
9646
|
+
<span class="normal"><a href="#__codelineno-0-570">570</a></span>
|
|
9647
|
+
<span class="normal"><a href="#__codelineno-0-571">571</a></span>
|
|
9716
9648
|
<span class="normal"><a href="#__codelineno-0-572">572</a></span>
|
|
9717
9649
|
<span class="normal"><a href="#__codelineno-0-573">573</a></span>
|
|
9718
9650
|
<span class="normal"><a href="#__codelineno-0-574">574</a></span>
|
|
9719
|
-
<span class="normal"><a href="#__codelineno-0-575">575</a></span>
|
|
9720
|
-
<
|
|
9721
|
-
<
|
|
9722
|
-
<a id="__codelineno-0-572" name="__codelineno-0-572"></a><span class="
|
|
9723
|
-
<a id="__codelineno-0-573" name="__codelineno-0-573"></a
|
|
9724
|
-
<a id="__codelineno-0-574" name="__codelineno-0-574"></a><span class="
|
|
9725
|
-
<a id="__codelineno-0-575" name="__codelineno-0-575"></a>
|
|
9726
|
-
<a id="__codelineno-0-576" name="__codelineno-0-576"></a> <span class="nb">filter</span> <span class="o">=</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">ModelMultipleChoiceFilter</span>
|
|
9727
|
-
<a id="__codelineno-0-577" name="__codelineno-0-577"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">widgets</span><span class="o">.</span><span class="n">APISelectMultiple</span>
|
|
9651
|
+
<span class="normal"><a href="#__codelineno-0-575">575</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-569" name="__codelineno-0-569"></a><span class="k">class</span> <span class="nc">DynamicModelMultipleChoiceField</span><span class="p">(</span><span class="n">DynamicModelChoiceMixin</span><span class="p">,</span> <span class="n">django_forms</span><span class="o">.</span><span class="n">ModelMultipleChoiceField</span><span class="p">):</span>
|
|
9652
|
+
<a id="__codelineno-0-570" name="__codelineno-0-570"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9653
|
+
<a id="__codelineno-0-571" name="__codelineno-0-571"></a><span class="sd"> A multiple-choice version of DynamicModelChoiceField.</span>
|
|
9654
|
+
<a id="__codelineno-0-572" name="__codelineno-0-572"></a><span class="sd"> """</span>
|
|
9655
|
+
<a id="__codelineno-0-573" name="__codelineno-0-573"></a>
|
|
9656
|
+
<a id="__codelineno-0-574" name="__codelineno-0-574"></a> <span class="nb">filter</span> <span class="o">=</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">ModelMultipleChoiceFilter</span>
|
|
9657
|
+
<a id="__codelineno-0-575" name="__codelineno-0-575"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">widgets</span><span class="o">.</span><span class="n">APISelectMultiple</span>
|
|
9728
9658
|
</code></pre></div></td></tr></table></div>
|
|
9729
9659
|
</details>
|
|
9730
9660
|
|
|
@@ -9769,7 +9699,9 @@ because the rendered form field needs this in order to correctly prepopulate a d
|
|
|
9769
9699
|
|
|
9770
9700
|
<details class="quote">
|
|
9771
9701
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
9772
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9702
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-341">341</a></span>
|
|
9703
|
+
<span class="normal"><a href="#__codelineno-0-342">342</a></span>
|
|
9704
|
+
<span class="normal"><a href="#__codelineno-0-343">343</a></span>
|
|
9773
9705
|
<span class="normal"><a href="#__codelineno-0-344">344</a></span>
|
|
9774
9706
|
<span class="normal"><a href="#__codelineno-0-345">345</a></span>
|
|
9775
9707
|
<span class="normal"><a href="#__codelineno-0-346">346</a></span>
|
|
@@ -9791,33 +9723,31 @@ because the rendered form field needs this in order to correctly prepopulate a d
|
|
|
9791
9723
|
<span class="normal"><a href="#__codelineno-0-362">362</a></span>
|
|
9792
9724
|
<span class="normal"><a href="#__codelineno-0-363">363</a></span>
|
|
9793
9725
|
<span class="normal"><a href="#__codelineno-0-364">364</a></span>
|
|
9794
|
-
<span class="normal"><a href="#__codelineno-0-365">365</a></span>
|
|
9795
|
-
<
|
|
9796
|
-
<
|
|
9797
|
-
<a id="__codelineno-0-344" name="__codelineno-0-344"></a><span class="
|
|
9798
|
-
<a id="__codelineno-0-345" name="__codelineno-0-345"></a><span class="sd">
|
|
9799
|
-
<a id="__codelineno-0-346" name="__codelineno-0-346"></a
|
|
9800
|
-
<a id="__codelineno-0-347" name="__codelineno-0-347"></a><span class="
|
|
9801
|
-
<a id="__codelineno-0-348" name="__codelineno-0-348"></a>
|
|
9802
|
-
<a id="__codelineno-0-349" name="__codelineno-0-349"></a>
|
|
9803
|
-
<a id="__codelineno-0-350" name="__codelineno-0-350"></a>
|
|
9804
|
-
<a id="__codelineno-0-351" name="__codelineno-0-351"></a>
|
|
9805
|
-
<a id="__codelineno-0-352" name="__codelineno-0-352"></a> <span class="
|
|
9806
|
-
<a id="__codelineno-0-353" name="__codelineno-0-353"></a>
|
|
9807
|
-
<a id="__codelineno-0-354" name="__codelineno-0-354"></a>
|
|
9808
|
-
<a id="__codelineno-0-355" name="__codelineno-0-355"></a>
|
|
9809
|
-
<a id="__codelineno-0-356" name="__codelineno-0-356"></a>
|
|
9810
|
-
<a id="__codelineno-0-357" name="__codelineno-0-357"></a>
|
|
9811
|
-
<a id="__codelineno-0-358" name="__codelineno-0-358"></a>
|
|
9812
|
-
<a id="__codelineno-0-359" name="__codelineno-0-359"></a>
|
|
9813
|
-
<a id="__codelineno-0-360" name="__codelineno-0-360"></a>
|
|
9814
|
-
<a id="__codelineno-0-361" name="__codelineno-0-361"></a>
|
|
9815
|
-
<a id="__codelineno-0-362" name="__codelineno-0-362"></a> <span class="k">
|
|
9816
|
-
<a id="__codelineno-0-363" name="__codelineno-0-363"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">expand_ipaddress_pattern</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">
|
|
9817
|
-
<a id="__codelineno-0-364" name="__codelineno-0-364"></a>
|
|
9818
|
-
<a id="__codelineno-0-365" name="__codelineno-0-365"></a>
|
|
9819
|
-
<a id="__codelineno-0-366" name="__codelineno-0-366"></a>
|
|
9820
|
-
<a id="__codelineno-0-367" name="__codelineno-0-367"></a> <span class="k">return</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
|
|
9726
|
+
<span class="normal"><a href="#__codelineno-0-365">365</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-341" name="__codelineno-0-341"></a><span class="k">class</span> <span class="nc">ExpandableIPAddressField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">):</span>
|
|
9727
|
+
<a id="__codelineno-0-342" name="__codelineno-0-342"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9728
|
+
<a id="__codelineno-0-343" name="__codelineno-0-343"></a><span class="sd"> A field which allows for expansion of IP address ranges</span>
|
|
9729
|
+
<a id="__codelineno-0-344" name="__codelineno-0-344"></a><span class="sd"> Example: '192.0.2.[1-254]/24' => ['192.0.2.1/24', '192.0.2.2/24', '192.0.2.3/24' ... '192.0.2.254/24']</span>
|
|
9730
|
+
<a id="__codelineno-0-345" name="__codelineno-0-345"></a><span class="sd"> """</span>
|
|
9731
|
+
<a id="__codelineno-0-346" name="__codelineno-0-346"></a>
|
|
9732
|
+
<a id="__codelineno-0-347" name="__codelineno-0-347"></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>
|
|
9733
|
+
<a id="__codelineno-0-348" name="__codelineno-0-348"></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>
|
|
9734
|
+
<a id="__codelineno-0-349" name="__codelineno-0-349"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span><span class="p">:</span>
|
|
9735
|
+
<a id="__codelineno-0-350" name="__codelineno-0-350"></a> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span> <span class="o">=</span> <span class="p">(</span>
|
|
9736
|
+
<a id="__codelineno-0-351" name="__codelineno-0-351"></a> <span class="s2">"Specify a numeric range to create multiple IPs.<br />Example: <code>192.0.2.[1,5,100-254]/24</code>"</span>
|
|
9737
|
+
<a id="__codelineno-0-352" name="__codelineno-0-352"></a> <span class="p">)</span>
|
|
9738
|
+
<a id="__codelineno-0-353" name="__codelineno-0-353"></a>
|
|
9739
|
+
<a id="__codelineno-0-354" name="__codelineno-0-354"></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>
|
|
9740
|
+
<a id="__codelineno-0-355" name="__codelineno-0-355"></a> <span class="c1"># Ensure that a subnet mask has been specified. This prevents IPs from defaulting to a /32 or /128.</span>
|
|
9741
|
+
<a id="__codelineno-0-356" name="__codelineno-0-356"></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
|
|
9742
|
+
<a id="__codelineno-0-357" name="__codelineno-0-357"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="s2">"CIDR mask (e.g. /24) is required."</span><span class="p">)</span>
|
|
9743
|
+
<a id="__codelineno-0-358" name="__codelineno-0-358"></a>
|
|
9744
|
+
<a id="__codelineno-0-359" name="__codelineno-0-359"></a> <span class="c1"># Hackish address version detection but it's all we have to work with</span>
|
|
9745
|
+
<a id="__codelineno-0-360" name="__codelineno-0-360"></a> <span class="k">if</span> <span class="s2">"."</span> <span class="ow">in</span> <span class="n">value</span> <span class="ow">and</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">IP4_EXPANSION_PATTERN</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
9746
|
+
<a id="__codelineno-0-361" name="__codelineno-0-361"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">expand_ipaddress_pattern</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span>
|
|
9747
|
+
<a id="__codelineno-0-362" name="__codelineno-0-362"></a> <span class="k">elif</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="n">value</span> <span class="ow">and</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">IP6_EXPANSION_PATTERN</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
9748
|
+
<a id="__codelineno-0-363" name="__codelineno-0-363"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">expand_ipaddress_pattern</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span>
|
|
9749
|
+
<a id="__codelineno-0-364" name="__codelineno-0-364"></a>
|
|
9750
|
+
<a id="__codelineno-0-365" name="__codelineno-0-365"></a> <span class="k">return</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
|
|
9821
9751
|
</code></pre></div></td></tr></table></div>
|
|
9822
9752
|
</details>
|
|
9823
9753
|
|
|
@@ -9862,7 +9792,9 @@ because the rendered form field needs this in order to correctly prepopulate a d
|
|
|
9862
9792
|
|
|
9863
9793
|
<details class="quote">
|
|
9864
9794
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
9865
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9795
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-315">315</a></span>
|
|
9796
|
+
<span class="normal"><a href="#__codelineno-0-316">316</a></span>
|
|
9797
|
+
<span class="normal"><a href="#__codelineno-0-317">317</a></span>
|
|
9866
9798
|
<span class="normal"><a href="#__codelineno-0-318">318</a></span>
|
|
9867
9799
|
<span class="normal"><a href="#__codelineno-0-319">319</a></span>
|
|
9868
9800
|
<span class="normal"><a href="#__codelineno-0-320">320</a></span>
|
|
@@ -9883,32 +9815,30 @@ because the rendered form field needs this in order to correctly prepopulate a d
|
|
|
9883
9815
|
<span class="normal"><a href="#__codelineno-0-335">335</a></span>
|
|
9884
9816
|
<span class="normal"><a href="#__codelineno-0-336">336</a></span>
|
|
9885
9817
|
<span class="normal"><a href="#__codelineno-0-337">337</a></span>
|
|
9886
|
-
<span class="normal"><a href="#__codelineno-0-338">338</a></span>
|
|
9887
|
-
<
|
|
9888
|
-
<
|
|
9889
|
-
<a id="__codelineno-0-318" name="__codelineno-0-318"></a><span class="
|
|
9890
|
-
<a id="__codelineno-0-319" name="__codelineno-0-319"></a><span class="sd">
|
|
9891
|
-
<a id="__codelineno-0-320" name="__codelineno-0-320"></a
|
|
9892
|
-
<a id="__codelineno-0-321" name="__codelineno-0-321"></a><span class="
|
|
9893
|
-
<a id="__codelineno-0-322" name="__codelineno-0-322"></a>
|
|
9894
|
-
<a id="__codelineno-0-323" name="__codelineno-0-323"></a>
|
|
9895
|
-
<a id="__codelineno-0-324" name="__codelineno-0-324"></a>
|
|
9896
|
-
<a id="__codelineno-0-325" name="__codelineno-0-325"></a
|
|
9897
|
-
<a id="__codelineno-0-326" name="__codelineno-0-326"></a
|
|
9898
|
-
<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="s2">
|
|
9899
|
-
<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="s2">
|
|
9900
|
-
<a id="__codelineno-0-329" name="__codelineno-0-329"></a><span class="s2">
|
|
9901
|
-
<a id="__codelineno-0-330" name="__codelineno-0-330"></a><span class="s2">
|
|
9902
|
-
<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="s2">
|
|
9903
|
-
<a id="__codelineno-0-332" name="__codelineno-0-332"></a
|
|
9904
|
-
<a id="__codelineno-0-333" name="__codelineno-0-333"></a><span class="
|
|
9905
|
-
<a id="__codelineno-0-334" name="__codelineno-0-334"></a>
|
|
9906
|
-
<a id="__codelineno-0-335" name="__codelineno-0-335"></a>
|
|
9907
|
-
<a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="k">if</span> <span class="
|
|
9908
|
-
<a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="k">return</span> <span class="
|
|
9909
|
-
<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="k">
|
|
9910
|
-
<a id="__codelineno-0-339" name="__codelineno-0-339"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">expand_alphanumeric_pattern</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
|
|
9911
|
-
<a id="__codelineno-0-340" name="__codelineno-0-340"></a> <span class="k">return</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
|
|
9818
|
+
<span class="normal"><a href="#__codelineno-0-338">338</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="k">class</span> <span class="nc">ExpandableNameField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">):</span>
|
|
9819
|
+
<a id="__codelineno-0-316" name="__codelineno-0-316"></a><span class="w"> </span><span class="sd">"""</span>
|
|
9820
|
+
<a id="__codelineno-0-317" name="__codelineno-0-317"></a><span class="sd"> A field which allows for numeric range expansion</span>
|
|
9821
|
+
<a id="__codelineno-0-318" name="__codelineno-0-318"></a><span class="sd"> Example: 'Gi0/[1-3]' => ['Gi0/1', 'Gi0/2', 'Gi0/3']</span>
|
|
9822
|
+
<a id="__codelineno-0-319" name="__codelineno-0-319"></a><span class="sd"> """</span>
|
|
9823
|
+
<a id="__codelineno-0-320" name="__codelineno-0-320"></a>
|
|
9824
|
+
<a id="__codelineno-0-321" name="__codelineno-0-321"></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>
|
|
9825
|
+
<a id="__codelineno-0-322" name="__codelineno-0-322"></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>
|
|
9826
|
+
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span><span class="p">:</span>
|
|
9827
|
+
<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
9828
|
+
<a id="__codelineno-0-325" name="__codelineno-0-325"></a><span class="s2"> Alphanumeric ranges are supported for bulk creation. Mixed cases and types within a single range</span>
|
|
9829
|
+
<a id="__codelineno-0-326" name="__codelineno-0-326"></a><span class="s2"> are not supported. Examples:</span>
|
|
9830
|
+
<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="s2"> <ul></span>
|
|
9831
|
+
<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="s2"> <li><code>[ge,xe]-0/0/[0-9]</code></li></span>
|
|
9832
|
+
<a id="__codelineno-0-329" name="__codelineno-0-329"></a><span class="s2"> <li><code>e[0-3][a-d,f]</code></li></span>
|
|
9833
|
+
<a id="__codelineno-0-330" name="__codelineno-0-330"></a><span class="s2"> </ul></span>
|
|
9834
|
+
<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="s2"> """</span>
|
|
9835
|
+
<a id="__codelineno-0-332" name="__codelineno-0-332"></a>
|
|
9836
|
+
<a id="__codelineno-0-333" name="__codelineno-0-333"></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>
|
|
9837
|
+
<a id="__codelineno-0-334" name="__codelineno-0-334"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
|
9838
|
+
<a id="__codelineno-0-335" name="__codelineno-0-335"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
9839
|
+
<a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">ALPHANUMERIC_EXPANSION_PATTERN</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
9840
|
+
<a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">expand_alphanumeric_pattern</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
|
|
9841
|
+
<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="k">return</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
|
|
9912
9842
|
</code></pre></div></td></tr></table></div>
|
|
9913
9843
|
</details>
|
|
9914
9844
|
|
|
@@ -10066,7 +9996,9 @@ and each Array element is validated by <code>base_field</code> validators.</p>
|
|
|
10066
9996
|
|
|
10067
9997
|
<details class="quote">
|
|
10068
9998
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10069
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
9999
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-612">612</a></span>
|
|
10000
|
+
<span class="normal"><a href="#__codelineno-0-613">613</a></span>
|
|
10001
|
+
<span class="normal"><a href="#__codelineno-0-614">614</a></span>
|
|
10070
10002
|
<span class="normal"><a href="#__codelineno-0-615">615</a></span>
|
|
10071
10003
|
<span class="normal"><a href="#__codelineno-0-616">616</a></span>
|
|
10072
10004
|
<span class="normal"><a href="#__codelineno-0-617">617</a></span>
|
|
@@ -10154,99 +10086,97 @@ and each Array element is validated by <code>base_field</code> validators.</p>
|
|
|
10154
10086
|
<span class="normal"><a href="#__codelineno-0-699">699</a></span>
|
|
10155
10087
|
<span class="normal"><a href="#__codelineno-0-700">700</a></span>
|
|
10156
10088
|
<span class="normal"><a href="#__codelineno-0-701">701</a></span>
|
|
10157
|
-
<span class="normal"><a href="#__codelineno-0-702">702</a></span>
|
|
10158
|
-
<
|
|
10159
|
-
<
|
|
10160
|
-
<a id="__codelineno-0-615" name="__codelineno-0-615"></a><span class="
|
|
10161
|
-
<a id="__codelineno-0-616" name="__codelineno-0-616"></a><span class="sd">
|
|
10162
|
-
<a id="__codelineno-0-617" name="__codelineno-0-617"></a><span class="sd">
|
|
10163
|
-
<a id="__codelineno-0-618" name="__codelineno-0-618"></a
|
|
10164
|
-
<a id="__codelineno-0-619" name="__codelineno-0-619"></a><span class="
|
|
10165
|
-
<a id="__codelineno-0-620" name="__codelineno-0-620"></a>
|
|
10166
|
-
<a id="__codelineno-0-621" name="__codelineno-0-621"></a>
|
|
10167
|
-
<a id="__codelineno-0-622" name="__codelineno-0-622"></a> <span class="
|
|
10168
|
-
<a id="__codelineno-0-623" name="__codelineno-0-623"></a>
|
|
10169
|
-
<a id="__codelineno-0-624" name="__codelineno-0-624"></a>
|
|
10170
|
-
<a id="__codelineno-0-625" name="__codelineno-0-625"></a>
|
|
10171
|
-
<a id="__codelineno-0-626" name="__codelineno-0-626"></a
|
|
10172
|
-
<a id="__codelineno-0-627" name="__codelineno-0-627"></a><span class="
|
|
10173
|
-
<a id="__codelineno-0-628" name="__codelineno-0-628"></a><span class="sd">
|
|
10174
|
-
<a id="__codelineno-0-629" name="__codelineno-0-629"></a
|
|
10175
|
-
<a id="__codelineno-0-630" name="__codelineno-0-630"></a><span class="
|
|
10176
|
-
<a id="__codelineno-0-631" name="__codelineno-0-631"></a>
|
|
10177
|
-
<a id="__codelineno-0-632" name="__codelineno-0-632"></a>
|
|
10178
|
-
<a id="__codelineno-0-633" name="__codelineno-0-633"></a>
|
|
10179
|
-
<a id="__codelineno-0-634" name="__codelineno-0-634"></a
|
|
10180
|
-
<a id="__codelineno-0-635" name="__codelineno-0-635"></a><span class="
|
|
10181
|
-
<a id="__codelineno-0-636" name="__codelineno-0-636"></a><span class="
|
|
10182
|
-
<a id="__codelineno-0-637" name="__codelineno-0-637"></a><span class="
|
|
10183
|
-
<a id="__codelineno-0-638" name="__codelineno-0-638"></a> <span class="k">
|
|
10184
|
-
<a id="__codelineno-0-639" name="__codelineno-0-639"></a>
|
|
10185
|
-
<a id="__codelineno-0-640" name="__codelineno-0-640"></a>
|
|
10186
|
-
<a id="__codelineno-0-641" name="__codelineno-0-641"></a>
|
|
10187
|
-
<a id="__codelineno-0-642" name="__codelineno-0-642"></a
|
|
10188
|
-
<a id="__codelineno-0-643" name="__codelineno-0-643"></a><span class="
|
|
10189
|
-
<a id="__codelineno-0-644" name="__codelineno-0-644"></a><span class="sd">
|
|
10190
|
-
<a id="__codelineno-0-645" name="__codelineno-0-645"></a
|
|
10191
|
-
<a id="__codelineno-0-646" name="__codelineno-0-646"></a
|
|
10192
|
-
<a id="__codelineno-0-647" name="__codelineno-0-647"></a> <span class="k">
|
|
10193
|
-
<a id="__codelineno-0-648" name="__codelineno-0-648"></a> <span class="
|
|
10194
|
-
<a id="__codelineno-0-649" name="__codelineno-0-649"></a>
|
|
10195
|
-
<a id="__codelineno-0-650" name="__codelineno-0-650"></a> <span class="k">
|
|
10196
|
-
<a id="__codelineno-0-651" name="__codelineno-0-651"></a> <span class="
|
|
10197
|
-
<a id="__codelineno-0-652" name="__codelineno-0-652"></a>
|
|
10198
|
-
<a id="__codelineno-0-653" name="__codelineno-0-653"></a>
|
|
10199
|
-
<a id="__codelineno-0-654" name="__codelineno-0-654"></a>
|
|
10200
|
-
<a id="__codelineno-0-655" name="__codelineno-0-655"></a>
|
|
10201
|
-
<a id="__codelineno-0-656" name="__codelineno-0-656"></a>
|
|
10202
|
-
<a id="__codelineno-0-657" name="__codelineno-0-657"></a> <span class="n">
|
|
10203
|
-
<a id="__codelineno-0-658" name="__codelineno-0-658"></a>
|
|
10204
|
-
<a id="__codelineno-0-659" name="__codelineno-0-659"></a>
|
|
10205
|
-
<a id="__codelineno-0-660" name="__codelineno-0-660"></a> <span class="k">
|
|
10206
|
-
<a id="__codelineno-0-661" name="__codelineno-0-661"></a> <span class="n">
|
|
10207
|
-
<a id="__codelineno-0-662" name="__codelineno-0-662"></a>
|
|
10208
|
-
<a id="__codelineno-0-663" name="__codelineno-0-663"></a>
|
|
10209
|
-
<a id="__codelineno-0-664" name="__codelineno-0-664"></a> <span class="k">
|
|
10210
|
-
<a id="__codelineno-0-665" name="__codelineno-0-665"></a>
|
|
10211
|
-
<a id="__codelineno-0-666" name="__codelineno-0-666"></a>
|
|
10212
|
-
<a id="__codelineno-0-667" name="__codelineno-0-667"></a>
|
|
10213
|
-
<a id="__codelineno-0-668" name="__codelineno-0-668"></a
|
|
10214
|
-
<a id="__codelineno-0-669" name="__codelineno-0-669"></a><span class="
|
|
10215
|
-
<a id="__codelineno-0-670" name="__codelineno-0-670"></a><span class="
|
|
10216
|
-
<a id="__codelineno-0-671" name="__codelineno-0-671"></a
|
|
10217
|
-
<a id="__codelineno-0-672" name="__codelineno-0-672"></a> <span class="
|
|
10218
|
-
<a id="__codelineno-0-673" name="__codelineno-0-673"></a>
|
|
10219
|
-
<a id="__codelineno-0-674" name="__codelineno-0-674"></a>
|
|
10220
|
-
<a id="__codelineno-0-675" name="__codelineno-0-675"></a> <span class="k">
|
|
10221
|
-
<a id="__codelineno-0-676" name="__codelineno-0-676"></a> <span class="
|
|
10222
|
-
<a id="__codelineno-0-677" name="__codelineno-0-677"></a>
|
|
10223
|
-
<a id="__codelineno-0-678" name="__codelineno-0-678"></a>
|
|
10224
|
-
<a id="__codelineno-0-679" name="__codelineno-0-679"></a>
|
|
10225
|
-
<a id="__codelineno-0-680" name="__codelineno-0-680"></a>
|
|
10226
|
-
<a id="__codelineno-0-681" name="__codelineno-0-681"></a>
|
|
10227
|
-
<a id="__codelineno-0-682" name="__codelineno-0-682"></a
|
|
10228
|
-
<a id="__codelineno-0-683" name="__codelineno-0-683"></a><span class="
|
|
10229
|
-
<a id="__codelineno-0-684" name="__codelineno-0-684"></a><span class="sd">
|
|
10230
|
-
<a id="__codelineno-0-685" name="__codelineno-0-685"></a><span class="
|
|
10231
|
-
<a id="__codelineno-0-686" name="__codelineno-0-686"></a
|
|
10232
|
-
<a id="__codelineno-0-687" name="__codelineno-0-687"></a> <span class="
|
|
10233
|
-
<a id="__codelineno-0-688" name="__codelineno-0-688"></a>
|
|
10234
|
-
<a id="__codelineno-0-689" name="__codelineno-0-689"></a>
|
|
10235
|
-
<a id="__codelineno-0-690" name="__codelineno-0-690"></a> <span class="k">
|
|
10236
|
-
<a id="__codelineno-0-691" name="__codelineno-0-691"></a> <span class="
|
|
10237
|
-
<a id="__codelineno-0-692" name="__codelineno-0-692"></a>
|
|
10238
|
-
<a id="__codelineno-0-693" name="__codelineno-0-693"></a>
|
|
10239
|
-
<a id="__codelineno-0-694" name="__codelineno-0-694"></a>
|
|
10240
|
-
<a id="__codelineno-0-695" name="__codelineno-0-695"></a>
|
|
10241
|
-
<a id="__codelineno-0-696" name="__codelineno-0-696"></a>
|
|
10242
|
-
<a id="__codelineno-0-697" name="__codelineno-0-697"></a
|
|
10243
|
-
<a id="__codelineno-0-698" name="__codelineno-0-698"></a><span class="
|
|
10244
|
-
<a id="__codelineno-0-699" name="__codelineno-0-699"></a
|
|
10245
|
-
<a id="__codelineno-0-700" name="__codelineno-0-700"></a><span class="
|
|
10246
|
-
<a id="__codelineno-0-701" name="__codelineno-0-701"></a>
|
|
10247
|
-
<a id="__codelineno-0-702" name="__codelineno-0-702"></a> <span class="k">
|
|
10248
|
-
<a id="__codelineno-0-703" name="__codelineno-0-703"></a> <span class="k">return</span> <span class="kc">False</span>
|
|
10249
|
-
<a id="__codelineno-0-704" name="__codelineno-0-704"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
|
10089
|
+
<span class="normal"><a href="#__codelineno-0-702">702</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-612" name="__codelineno-0-612"></a><span class="k">class</span> <span class="nc">JSONArrayFormField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">JSONField</span><span class="p">):</span>
|
|
10090
|
+
<a id="__codelineno-0-613" name="__codelineno-0-613"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10091
|
+
<a id="__codelineno-0-614" name="__codelineno-0-614"></a><span class="sd"> A FormField counterpart to JSONArrayField.</span>
|
|
10092
|
+
<a id="__codelineno-0-615" name="__codelineno-0-615"></a><span class="sd"> Replicates ArrayFormField's base field validation: Field values are validated as JSON Arrays,</span>
|
|
10093
|
+
<a id="__codelineno-0-616" name="__codelineno-0-616"></a><span class="sd"> and each Array element is validated by `base_field` validators.</span>
|
|
10094
|
+
<a id="__codelineno-0-617" name="__codelineno-0-617"></a><span class="sd"> """</span>
|
|
10095
|
+
<a id="__codelineno-0-618" name="__codelineno-0-618"></a>
|
|
10096
|
+
<a id="__codelineno-0-619" name="__codelineno-0-619"></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="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s2">","</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
10097
|
+
<a id="__codelineno-0-620" name="__codelineno-0-620"></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>
|
|
10098
|
+
<a id="__codelineno-0-621" name="__codelineno-0-621"></a> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">delimiter</span>
|
|
10099
|
+
<a id="__codelineno-0-622" name="__codelineno-0-622"></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>
|
|
10100
|
+
<a id="__codelineno-0-623" name="__codelineno-0-623"></a>
|
|
10101
|
+
<a id="__codelineno-0-624" name="__codelineno-0-624"></a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
10102
|
+
<a id="__codelineno-0-625" name="__codelineno-0-625"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10103
|
+
<a id="__codelineno-0-626" name="__codelineno-0-626"></a><span class="sd"> Validate `value` and return its "cleaned" value as an appropriate</span>
|
|
10104
|
+
<a id="__codelineno-0-627" name="__codelineno-0-627"></a><span class="sd"> Python object. Raise ValidationError for any errors.</span>
|
|
10105
|
+
<a id="__codelineno-0-628" name="__codelineno-0-628"></a><span class="sd"> """</span>
|
|
10106
|
+
<a id="__codelineno-0-629" name="__codelineno-0-629"></a> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
10107
|
+
<a id="__codelineno-0-630" name="__codelineno-0-630"></a> <span class="k">return</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">clean</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">value</span><span class="p">]</span>
|
|
10108
|
+
<a id="__codelineno-0-631" name="__codelineno-0-631"></a>
|
|
10109
|
+
<a id="__codelineno-0-632" name="__codelineno-0-632"></a> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
10110
|
+
<a id="__codelineno-0-633" name="__codelineno-0-633"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10111
|
+
<a id="__codelineno-0-634" name="__codelineno-0-634"></a><span class="sd"> Return a string of this value.</span>
|
|
10112
|
+
<a id="__codelineno-0-635" name="__codelineno-0-635"></a><span class="sd"> """</span>
|
|
10113
|
+
<a id="__codelineno-0-636" name="__codelineno-0-636"></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">list</span><span class="p">):</span>
|
|
10114
|
+
<a id="__codelineno-0-637" name="__codelineno-0-637"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</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">prepare_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>
|
|
10115
|
+
<a id="__codelineno-0-638" name="__codelineno-0-638"></a> <span class="k">return</span> <span class="n">value</span>
|
|
10116
|
+
<a id="__codelineno-0-639" name="__codelineno-0-639"></a>
|
|
10117
|
+
<a id="__codelineno-0-640" name="__codelineno-0-640"></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>
|
|
10118
|
+
<a id="__codelineno-0-641" name="__codelineno-0-641"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10119
|
+
<a id="__codelineno-0-642" name="__codelineno-0-642"></a><span class="sd"> Convert `value` into JSON, raising django.core.exceptions.ValidationError</span>
|
|
10120
|
+
<a id="__codelineno-0-643" name="__codelineno-0-643"></a><span class="sd"> if the data can't be converted. Return the converted value.</span>
|
|
10121
|
+
<a id="__codelineno-0-644" name="__codelineno-0-644"></a><span class="sd"> """</span>
|
|
10122
|
+
<a id="__codelineno-0-645" name="__codelineno-0-645"></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">list</span><span class="p">):</span>
|
|
10123
|
+
<a id="__codelineno-0-646" name="__codelineno-0-646"></a> <span class="n">items</span> <span class="o">=</span> <span class="n">value</span>
|
|
10124
|
+
<a id="__codelineno-0-647" name="__codelineno-0-647"></a> <span class="k">elif</span> <span class="n">value</span><span class="p">:</span>
|
|
10125
|
+
<a id="__codelineno-0-648" name="__codelineno-0-648"></a> <span class="k">try</span><span class="p">:</span>
|
|
10126
|
+
<a id="__codelineno-0-649" name="__codelineno-0-649"></a> <span class="n">items</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="p">)</span>
|
|
10127
|
+
<a id="__codelineno-0-650" name="__codelineno-0-650"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
10128
|
+
<a id="__codelineno-0-651" name="__codelineno-0-651"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
10129
|
+
<a id="__codelineno-0-652" name="__codelineno-0-652"></a> <span class="k">else</span><span class="p">:</span>
|
|
10130
|
+
<a id="__codelineno-0-653" name="__codelineno-0-653"></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10131
|
+
<a id="__codelineno-0-654" name="__codelineno-0-654"></a>
|
|
10132
|
+
<a id="__codelineno-0-655" name="__codelineno-0-655"></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10133
|
+
<a id="__codelineno-0-656" name="__codelineno-0-656"></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10134
|
+
<a id="__codelineno-0-657" name="__codelineno-0-657"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
|
|
10135
|
+
<a id="__codelineno-0-658" name="__codelineno-0-658"></a> <span class="k">try</span><span class="p">:</span>
|
|
10136
|
+
<a id="__codelineno-0-659" name="__codelineno-0-659"></a> <span class="n">values</span><span class="o">.</span><span class="n">append</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">item</span><span class="p">))</span>
|
|
10137
|
+
<a id="__codelineno-0-660" name="__codelineno-0-660"></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
|
10138
|
+
<a id="__codelineno-0-661" name="__codelineno-0-661"></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
10139
|
+
<a id="__codelineno-0-662" name="__codelineno-0-662"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10140
|
+
<a id="__codelineno-0-663" name="__codelineno-0-663"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10141
|
+
<a id="__codelineno-0-664" name="__codelineno-0-664"></a> <span class="k">return</span> <span class="n">values</span>
|
|
10142
|
+
<a id="__codelineno-0-665" name="__codelineno-0-665"></a>
|
|
10143
|
+
<a id="__codelineno-0-666" name="__codelineno-0-666"></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>
|
|
10144
|
+
<a id="__codelineno-0-667" name="__codelineno-0-667"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10145
|
+
<a id="__codelineno-0-668" name="__codelineno-0-668"></a><span class="sd"> Validate `value` and raise ValidationError if necessary.</span>
|
|
10146
|
+
<a id="__codelineno-0-669" name="__codelineno-0-669"></a><span class="sd"> """</span>
|
|
10147
|
+
<a id="__codelineno-0-670" name="__codelineno-0-670"></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>
|
|
10148
|
+
<a id="__codelineno-0-671" name="__codelineno-0-671"></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10149
|
+
<a id="__codelineno-0-672" name="__codelineno-0-672"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
10150
|
+
<a id="__codelineno-0-673" name="__codelineno-0-673"></a> <span class="k">try</span><span class="p">:</span>
|
|
10151
|
+
<a id="__codelineno-0-674" name="__codelineno-0-674"></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">item</span><span class="p">)</span>
|
|
10152
|
+
<a id="__codelineno-0-675" name="__codelineno-0-675"></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
|
10153
|
+
<a id="__codelineno-0-676" name="__codelineno-0-676"></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
10154
|
+
<a id="__codelineno-0-677" name="__codelineno-0-677"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10155
|
+
<a id="__codelineno-0-678" name="__codelineno-0-678"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10156
|
+
<a id="__codelineno-0-679" name="__codelineno-0-679"></a>
|
|
10157
|
+
<a id="__codelineno-0-680" name="__codelineno-0-680"></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>
|
|
10158
|
+
<a id="__codelineno-0-681" name="__codelineno-0-681"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10159
|
+
<a id="__codelineno-0-682" name="__codelineno-0-682"></a><span class="sd"> Runs all validators against `value` and raise ValidationError if necessary.</span>
|
|
10160
|
+
<a id="__codelineno-0-683" name="__codelineno-0-683"></a><span class="sd"> Some validators can't be created at field initialization time.</span>
|
|
10161
|
+
<a id="__codelineno-0-684" name="__codelineno-0-684"></a><span class="sd"> """</span>
|
|
10162
|
+
<a id="__codelineno-0-685" name="__codelineno-0-685"></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>
|
|
10163
|
+
<a id="__codelineno-0-686" name="__codelineno-0-686"></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10164
|
+
<a id="__codelineno-0-687" name="__codelineno-0-687"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
10165
|
+
<a id="__codelineno-0-688" name="__codelineno-0-688"></a> <span class="k">try</span><span class="p">:</span>
|
|
10166
|
+
<a id="__codelineno-0-689" name="__codelineno-0-689"></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">item</span><span class="p">)</span>
|
|
10167
|
+
<a id="__codelineno-0-690" name="__codelineno-0-690"></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
|
10168
|
+
<a id="__codelineno-0-691" name="__codelineno-0-691"></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
10169
|
+
<a id="__codelineno-0-692" name="__codelineno-0-692"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10170
|
+
<a id="__codelineno-0-693" name="__codelineno-0-693"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10171
|
+
<a id="__codelineno-0-694" name="__codelineno-0-694"></a>
|
|
10172
|
+
<a id="__codelineno-0-695" name="__codelineno-0-695"></a> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
10173
|
+
<a id="__codelineno-0-696" name="__codelineno-0-696"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10174
|
+
<a id="__codelineno-0-697" name="__codelineno-0-697"></a><span class="sd"> Return True if `data` differs from `initial`.</span>
|
|
10175
|
+
<a id="__codelineno-0-698" name="__codelineno-0-698"></a><span class="sd"> """</span>
|
|
10176
|
+
<a id="__codelineno-0-699" name="__codelineno-0-699"></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
|
10177
|
+
<a id="__codelineno-0-700" name="__codelineno-0-700"></a> <span class="k">if</span> <span class="n">initial</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span>
|
|
10178
|
+
<a id="__codelineno-0-701" name="__codelineno-0-701"></a> <span class="k">return</span> <span class="kc">False</span>
|
|
10179
|
+
<a id="__codelineno-0-702" name="__codelineno-0-702"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
|
10250
10180
|
</code></pre></div></td></tr></table></div>
|
|
10251
10181
|
</details>
|
|
10252
10182
|
|
|
@@ -10280,19 +10210,19 @@ Python object. Raise ValidationError for any errors.</p>
|
|
|
10280
10210
|
|
|
10281
10211
|
<details class="quote">
|
|
10282
10212
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10283
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10213
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-624">624</a></span>
|
|
10214
|
+
<span class="normal"><a href="#__codelineno-0-625">625</a></span>
|
|
10215
|
+
<span class="normal"><a href="#__codelineno-0-626">626</a></span>
|
|
10284
10216
|
<span class="normal"><a href="#__codelineno-0-627">627</a></span>
|
|
10285
10217
|
<span class="normal"><a href="#__codelineno-0-628">628</a></span>
|
|
10286
10218
|
<span class="normal"><a href="#__codelineno-0-629">629</a></span>
|
|
10287
|
-
<span class="normal"><a href="#__codelineno-0-630">630</a></span>
|
|
10288
|
-
<
|
|
10289
|
-
<
|
|
10290
|
-
<a id="__codelineno-0-627" name="__codelineno-0-627"></a><span class="
|
|
10291
|
-
<a id="__codelineno-0-628" name="__codelineno-0-628"></a><span class="sd">
|
|
10292
|
-
<a id="__codelineno-0-629" name="__codelineno-0-629"></a
|
|
10293
|
-
<a id="__codelineno-0-630" name="__codelineno-0-630"></a><span class="
|
|
10294
|
-
<a id="__codelineno-0-631" name="__codelineno-0-631"></a> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
10295
|
-
<a id="__codelineno-0-632" name="__codelineno-0-632"></a> <span class="k">return</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">clean</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">value</span><span class="p">]</span>
|
|
10219
|
+
<span class="normal"><a href="#__codelineno-0-630">630</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-624" name="__codelineno-0-624"></a><span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
10220
|
+
<a id="__codelineno-0-625" name="__codelineno-0-625"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10221
|
+
<a id="__codelineno-0-626" name="__codelineno-0-626"></a><span class="sd"> Validate `value` and return its "cleaned" value as an appropriate</span>
|
|
10222
|
+
<a id="__codelineno-0-627" name="__codelineno-0-627"></a><span class="sd"> Python object. Raise ValidationError for any errors.</span>
|
|
10223
|
+
<a id="__codelineno-0-628" name="__codelineno-0-628"></a><span class="sd"> """</span>
|
|
10224
|
+
<a id="__codelineno-0-629" name="__codelineno-0-629"></a> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
10225
|
+
<a id="__codelineno-0-630" name="__codelineno-0-630"></a> <span class="k">return</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">clean</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">value</span><span class="p">]</span>
|
|
10296
10226
|
</code></pre></div></td></tr></table></div>
|
|
10297
10227
|
</details>
|
|
10298
10228
|
</div>
|
|
@@ -10316,21 +10246,21 @@ Python object. Raise ValidationError for any errors.</p>
|
|
|
10316
10246
|
|
|
10317
10247
|
<details class="quote">
|
|
10318
10248
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10319
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10249
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-695">695</a></span>
|
|
10250
|
+
<span class="normal"><a href="#__codelineno-0-696">696</a></span>
|
|
10251
|
+
<span class="normal"><a href="#__codelineno-0-697">697</a></span>
|
|
10320
10252
|
<span class="normal"><a href="#__codelineno-0-698">698</a></span>
|
|
10321
10253
|
<span class="normal"><a href="#__codelineno-0-699">699</a></span>
|
|
10322
10254
|
<span class="normal"><a href="#__codelineno-0-700">700</a></span>
|
|
10323
10255
|
<span class="normal"><a href="#__codelineno-0-701">701</a></span>
|
|
10324
|
-
<span class="normal"><a href="#__codelineno-0-702">702</a></span>
|
|
10325
|
-
<
|
|
10326
|
-
<
|
|
10327
|
-
<a id="__codelineno-0-698" name="__codelineno-0-698"></a><span class="
|
|
10328
|
-
<a id="__codelineno-0-699" name="__codelineno-0-699"></a
|
|
10329
|
-
<a id="__codelineno-0-700" name="__codelineno-0-700"></a><span class="
|
|
10330
|
-
<a id="__codelineno-0-701" name="__codelineno-0-701"></a>
|
|
10331
|
-
<a id="__codelineno-0-702" name="__codelineno-0-702"></a> <span class="k">
|
|
10332
|
-
<a id="__codelineno-0-703" name="__codelineno-0-703"></a> <span class="k">return</span> <span class="kc">False</span>
|
|
10333
|
-
<a id="__codelineno-0-704" name="__codelineno-0-704"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
|
10256
|
+
<span class="normal"><a href="#__codelineno-0-702">702</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-695" name="__codelineno-0-695"></a><span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
10257
|
+
<a id="__codelineno-0-696" name="__codelineno-0-696"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10258
|
+
<a id="__codelineno-0-697" name="__codelineno-0-697"></a><span class="sd"> Return True if `data` differs from `initial`.</span>
|
|
10259
|
+
<a id="__codelineno-0-698" name="__codelineno-0-698"></a><span class="sd"> """</span>
|
|
10260
|
+
<a id="__codelineno-0-699" name="__codelineno-0-699"></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
|
10261
|
+
<a id="__codelineno-0-700" name="__codelineno-0-700"></a> <span class="k">if</span> <span class="n">initial</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span>
|
|
10262
|
+
<a id="__codelineno-0-701" name="__codelineno-0-701"></a> <span class="k">return</span> <span class="kc">False</span>
|
|
10263
|
+
<a id="__codelineno-0-702" name="__codelineno-0-702"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
|
10334
10264
|
</code></pre></div></td></tr></table></div>
|
|
10335
10265
|
</details>
|
|
10336
10266
|
</div>
|
|
@@ -10354,19 +10284,19 @@ Python object. Raise ValidationError for any errors.</p>
|
|
|
10354
10284
|
|
|
10355
10285
|
<details class="quote">
|
|
10356
10286
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10357
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10287
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-632">632</a></span>
|
|
10288
|
+
<span class="normal"><a href="#__codelineno-0-633">633</a></span>
|
|
10289
|
+
<span class="normal"><a href="#__codelineno-0-634">634</a></span>
|
|
10358
10290
|
<span class="normal"><a href="#__codelineno-0-635">635</a></span>
|
|
10359
10291
|
<span class="normal"><a href="#__codelineno-0-636">636</a></span>
|
|
10360
10292
|
<span class="normal"><a href="#__codelineno-0-637">637</a></span>
|
|
10361
|
-
<span class="normal"><a href="#__codelineno-0-638">638</a></span>
|
|
10362
|
-
<
|
|
10363
|
-
<
|
|
10364
|
-
<a id="__codelineno-0-635" name="__codelineno-0-635"></a><span class="
|
|
10365
|
-
<a id="__codelineno-0-636" name="__codelineno-0-636"></a><span class="
|
|
10366
|
-
<a id="__codelineno-0-637" name="__codelineno-0-637"></a><span class="
|
|
10367
|
-
<a id="__codelineno-0-638" name="__codelineno-0-638"></a> <span class="k">
|
|
10368
|
-
<a id="__codelineno-0-639" name="__codelineno-0-639"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</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">prepare_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>
|
|
10369
|
-
<a id="__codelineno-0-640" name="__codelineno-0-640"></a> <span class="k">return</span> <span class="n">value</span>
|
|
10293
|
+
<span class="normal"><a href="#__codelineno-0-638">638</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-632" name="__codelineno-0-632"></a><span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
10294
|
+
<a id="__codelineno-0-633" name="__codelineno-0-633"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10295
|
+
<a id="__codelineno-0-634" name="__codelineno-0-634"></a><span class="sd"> Return a string of this value.</span>
|
|
10296
|
+
<a id="__codelineno-0-635" name="__codelineno-0-635"></a><span class="sd"> """</span>
|
|
10297
|
+
<a id="__codelineno-0-636" name="__codelineno-0-636"></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">list</span><span class="p">):</span>
|
|
10298
|
+
<a id="__codelineno-0-637" name="__codelineno-0-637"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</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">prepare_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>
|
|
10299
|
+
<a id="__codelineno-0-638" name="__codelineno-0-638"></a> <span class="k">return</span> <span class="n">value</span>
|
|
10370
10300
|
</code></pre></div></td></tr></table></div>
|
|
10371
10301
|
</details>
|
|
10372
10302
|
</div>
|
|
@@ -10391,7 +10321,9 @@ Some validators can't be created at field initialization time.</p>
|
|
|
10391
10321
|
|
|
10392
10322
|
<details class="quote">
|
|
10393
10323
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10394
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10324
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-680">680</a></span>
|
|
10325
|
+
<span class="normal"><a href="#__codelineno-0-681">681</a></span>
|
|
10326
|
+
<span class="normal"><a href="#__codelineno-0-682">682</a></span>
|
|
10395
10327
|
<span class="normal"><a href="#__codelineno-0-683">683</a></span>
|
|
10396
10328
|
<span class="normal"><a href="#__codelineno-0-684">684</a></span>
|
|
10397
10329
|
<span class="normal"><a href="#__codelineno-0-685">685</a></span>
|
|
@@ -10402,22 +10334,20 @@ Some validators can't be created at field initialization time.</p>
|
|
|
10402
10334
|
<span class="normal"><a href="#__codelineno-0-690">690</a></span>
|
|
10403
10335
|
<span class="normal"><a href="#__codelineno-0-691">691</a></span>
|
|
10404
10336
|
<span class="normal"><a href="#__codelineno-0-692">692</a></span>
|
|
10405
|
-
<span class="normal"><a href="#__codelineno-0-693">693</a></span>
|
|
10406
|
-
<
|
|
10407
|
-
<
|
|
10408
|
-
<a id="__codelineno-0-683" name="__codelineno-0-683"></a><span class="
|
|
10409
|
-
<a id="__codelineno-0-684" name="__codelineno-0-684"></a><span class="sd">
|
|
10410
|
-
<a id="__codelineno-0-685" name="__codelineno-0-685"></a><span class="
|
|
10411
|
-
<a id="__codelineno-0-686" name="__codelineno-0-686"></a
|
|
10412
|
-
<a id="__codelineno-0-687" name="__codelineno-0-687"></a> <span class="
|
|
10413
|
-
<a id="__codelineno-0-688" name="__codelineno-0-688"></a>
|
|
10414
|
-
<a id="__codelineno-0-689" name="__codelineno-0-689"></a>
|
|
10415
|
-
<a id="__codelineno-0-690" name="__codelineno-0-690"></a> <span class="k">
|
|
10416
|
-
<a id="__codelineno-0-691" name="__codelineno-0-691"></a> <span class="
|
|
10417
|
-
<a id="__codelineno-0-692" name="__codelineno-0-692"></a>
|
|
10418
|
-
<a id="__codelineno-0-693" name="__codelineno-0-693"></a>
|
|
10419
|
-
<a id="__codelineno-0-694" name="__codelineno-0-694"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10420
|
-
<a id="__codelineno-0-695" name="__codelineno-0-695"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10337
|
+
<span class="normal"><a href="#__codelineno-0-693">693</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-680" name="__codelineno-0-680"></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>
|
|
10338
|
+
<a id="__codelineno-0-681" name="__codelineno-0-681"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10339
|
+
<a id="__codelineno-0-682" name="__codelineno-0-682"></a><span class="sd"> Runs all validators against `value` and raise ValidationError if necessary.</span>
|
|
10340
|
+
<a id="__codelineno-0-683" name="__codelineno-0-683"></a><span class="sd"> Some validators can't be created at field initialization time.</span>
|
|
10341
|
+
<a id="__codelineno-0-684" name="__codelineno-0-684"></a><span class="sd"> """</span>
|
|
10342
|
+
<a id="__codelineno-0-685" name="__codelineno-0-685"></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>
|
|
10343
|
+
<a id="__codelineno-0-686" name="__codelineno-0-686"></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10344
|
+
<a id="__codelineno-0-687" name="__codelineno-0-687"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
10345
|
+
<a id="__codelineno-0-688" name="__codelineno-0-688"></a> <span class="k">try</span><span class="p">:</span>
|
|
10346
|
+
<a id="__codelineno-0-689" name="__codelineno-0-689"></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">item</span><span class="p">)</span>
|
|
10347
|
+
<a id="__codelineno-0-690" name="__codelineno-0-690"></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
|
10348
|
+
<a id="__codelineno-0-691" name="__codelineno-0-691"></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
10349
|
+
<a id="__codelineno-0-692" name="__codelineno-0-692"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10350
|
+
<a id="__codelineno-0-693" name="__codelineno-0-693"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10421
10351
|
</code></pre></div></td></tr></table></div>
|
|
10422
10352
|
</details>
|
|
10423
10353
|
</div>
|
|
@@ -10442,7 +10372,9 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10442
10372
|
|
|
10443
10373
|
<details class="quote">
|
|
10444
10374
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10445
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10375
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-640">640</a></span>
|
|
10376
|
+
<span class="normal"><a href="#__codelineno-0-641">641</a></span>
|
|
10377
|
+
<span class="normal"><a href="#__codelineno-0-642">642</a></span>
|
|
10446
10378
|
<span class="normal"><a href="#__codelineno-0-643">643</a></span>
|
|
10447
10379
|
<span class="normal"><a href="#__codelineno-0-644">644</a></span>
|
|
10448
10380
|
<span class="normal"><a href="#__codelineno-0-645">645</a></span>
|
|
@@ -10464,33 +10396,31 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10464
10396
|
<span class="normal"><a href="#__codelineno-0-661">661</a></span>
|
|
10465
10397
|
<span class="normal"><a href="#__codelineno-0-662">662</a></span>
|
|
10466
10398
|
<span class="normal"><a href="#__codelineno-0-663">663</a></span>
|
|
10467
|
-
<span class="normal"><a href="#__codelineno-0-664">664</a></span>
|
|
10468
|
-
<
|
|
10469
|
-
<
|
|
10470
|
-
<a id="__codelineno-0-643" name="__codelineno-0-643"></a><span class="
|
|
10471
|
-
<a id="__codelineno-0-644" name="__codelineno-0-644"></a><span class="sd">
|
|
10472
|
-
<a id="__codelineno-0-645" name="__codelineno-0-645"></a
|
|
10473
|
-
<a id="__codelineno-0-646" name="__codelineno-0-646"></a
|
|
10474
|
-
<a id="__codelineno-0-647" name="__codelineno-0-647"></a> <span class="k">
|
|
10475
|
-
<a id="__codelineno-0-648" name="__codelineno-0-648"></a> <span class="
|
|
10476
|
-
<a id="__codelineno-0-649" name="__codelineno-0-649"></a>
|
|
10477
|
-
<a id="__codelineno-0-650" name="__codelineno-0-650"></a> <span class="k">
|
|
10478
|
-
<a id="__codelineno-0-651" name="__codelineno-0-651"></a> <span class="
|
|
10479
|
-
<a id="__codelineno-0-652" name="__codelineno-0-652"></a>
|
|
10480
|
-
<a id="__codelineno-0-653" name="__codelineno-0-653"></a>
|
|
10481
|
-
<a id="__codelineno-0-654" name="__codelineno-0-654"></a>
|
|
10482
|
-
<a id="__codelineno-0-655" name="__codelineno-0-655"></a>
|
|
10483
|
-
<a id="__codelineno-0-656" name="__codelineno-0-656"></a>
|
|
10484
|
-
<a id="__codelineno-0-657" name="__codelineno-0-657"></a> <span class="n">
|
|
10485
|
-
<a id="__codelineno-0-658" name="__codelineno-0-658"></a>
|
|
10486
|
-
<a id="__codelineno-0-659" name="__codelineno-0-659"></a>
|
|
10487
|
-
<a id="__codelineno-0-660" name="__codelineno-0-660"></a> <span class="k">
|
|
10488
|
-
<a id="__codelineno-0-661" name="__codelineno-0-661"></a> <span class="n">
|
|
10489
|
-
<a id="__codelineno-0-662" name="__codelineno-0-662"></a>
|
|
10490
|
-
<a id="__codelineno-0-663" name="__codelineno-0-663"></a>
|
|
10491
|
-
<a id="__codelineno-0-664" name="__codelineno-0-664"></a> <span class="k">
|
|
10492
|
-
<a id="__codelineno-0-665" name="__codelineno-0-665"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10493
|
-
<a id="__codelineno-0-666" name="__codelineno-0-666"></a> <span class="k">return</span> <span class="n">values</span>
|
|
10399
|
+
<span class="normal"><a href="#__codelineno-0-664">664</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-640" name="__codelineno-0-640"></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>
|
|
10400
|
+
<a id="__codelineno-0-641" name="__codelineno-0-641"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10401
|
+
<a id="__codelineno-0-642" name="__codelineno-0-642"></a><span class="sd"> Convert `value` into JSON, raising django.core.exceptions.ValidationError</span>
|
|
10402
|
+
<a id="__codelineno-0-643" name="__codelineno-0-643"></a><span class="sd"> if the data can't be converted. Return the converted value.</span>
|
|
10403
|
+
<a id="__codelineno-0-644" name="__codelineno-0-644"></a><span class="sd"> """</span>
|
|
10404
|
+
<a id="__codelineno-0-645" name="__codelineno-0-645"></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">list</span><span class="p">):</span>
|
|
10405
|
+
<a id="__codelineno-0-646" name="__codelineno-0-646"></a> <span class="n">items</span> <span class="o">=</span> <span class="n">value</span>
|
|
10406
|
+
<a id="__codelineno-0-647" name="__codelineno-0-647"></a> <span class="k">elif</span> <span class="n">value</span><span class="p">:</span>
|
|
10407
|
+
<a id="__codelineno-0-648" name="__codelineno-0-648"></a> <span class="k">try</span><span class="p">:</span>
|
|
10408
|
+
<a id="__codelineno-0-649" name="__codelineno-0-649"></a> <span class="n">items</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="p">)</span>
|
|
10409
|
+
<a id="__codelineno-0-650" name="__codelineno-0-650"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
10410
|
+
<a id="__codelineno-0-651" name="__codelineno-0-651"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
10411
|
+
<a id="__codelineno-0-652" name="__codelineno-0-652"></a> <span class="k">else</span><span class="p">:</span>
|
|
10412
|
+
<a id="__codelineno-0-653" name="__codelineno-0-653"></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10413
|
+
<a id="__codelineno-0-654" name="__codelineno-0-654"></a>
|
|
10414
|
+
<a id="__codelineno-0-655" name="__codelineno-0-655"></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10415
|
+
<a id="__codelineno-0-656" name="__codelineno-0-656"></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10416
|
+
<a id="__codelineno-0-657" name="__codelineno-0-657"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
|
|
10417
|
+
<a id="__codelineno-0-658" name="__codelineno-0-658"></a> <span class="k">try</span><span class="p">:</span>
|
|
10418
|
+
<a id="__codelineno-0-659" name="__codelineno-0-659"></a> <span class="n">values</span><span class="o">.</span><span class="n">append</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">item</span><span class="p">))</span>
|
|
10419
|
+
<a id="__codelineno-0-660" name="__codelineno-0-660"></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
|
10420
|
+
<a id="__codelineno-0-661" name="__codelineno-0-661"></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
10421
|
+
<a id="__codelineno-0-662" name="__codelineno-0-662"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10422
|
+
<a id="__codelineno-0-663" name="__codelineno-0-663"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10423
|
+
<a id="__codelineno-0-664" name="__codelineno-0-664"></a> <span class="k">return</span> <span class="n">values</span>
|
|
10494
10424
|
</code></pre></div></td></tr></table></div>
|
|
10495
10425
|
</details>
|
|
10496
10426
|
</div>
|
|
@@ -10514,7 +10444,9 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10514
10444
|
|
|
10515
10445
|
<details class="quote">
|
|
10516
10446
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10517
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10447
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-666">666</a></span>
|
|
10448
|
+
<span class="normal"><a href="#__codelineno-0-667">667</a></span>
|
|
10449
|
+
<span class="normal"><a href="#__codelineno-0-668">668</a></span>
|
|
10518
10450
|
<span class="normal"><a href="#__codelineno-0-669">669</a></span>
|
|
10519
10451
|
<span class="normal"><a href="#__codelineno-0-670">670</a></span>
|
|
10520
10452
|
<span class="normal"><a href="#__codelineno-0-671">671</a></span>
|
|
@@ -10524,21 +10456,19 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10524
10456
|
<span class="normal"><a href="#__codelineno-0-675">675</a></span>
|
|
10525
10457
|
<span class="normal"><a href="#__codelineno-0-676">676</a></span>
|
|
10526
10458
|
<span class="normal"><a href="#__codelineno-0-677">677</a></span>
|
|
10527
|
-
<span class="normal"><a href="#__codelineno-0-678">678</a></span>
|
|
10528
|
-
<
|
|
10529
|
-
<
|
|
10530
|
-
<a id="__codelineno-0-669" name="__codelineno-0-669"></a><span class="
|
|
10531
|
-
<a id="__codelineno-0-670" name="__codelineno-0-670"></a><span class="
|
|
10532
|
-
<a id="__codelineno-0-671" name="__codelineno-0-671"></a
|
|
10533
|
-
<a id="__codelineno-0-672" name="__codelineno-0-672"></a> <span class="
|
|
10534
|
-
<a id="__codelineno-0-673" name="__codelineno-0-673"></a>
|
|
10535
|
-
<a id="__codelineno-0-674" name="__codelineno-0-674"></a>
|
|
10536
|
-
<a id="__codelineno-0-675" name="__codelineno-0-675"></a> <span class="k">
|
|
10537
|
-
<a id="__codelineno-0-676" name="__codelineno-0-676"></a> <span class="
|
|
10538
|
-
<a id="__codelineno-0-677" name="__codelineno-0-677"></a>
|
|
10539
|
-
<a id="__codelineno-0-678" name="__codelineno-0-678"></a>
|
|
10540
|
-
<a id="__codelineno-0-679" name="__codelineno-0-679"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10541
|
-
<a id="__codelineno-0-680" name="__codelineno-0-680"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10459
|
+
<span class="normal"><a href="#__codelineno-0-678">678</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-666" name="__codelineno-0-666"></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>
|
|
10460
|
+
<a id="__codelineno-0-667" name="__codelineno-0-667"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10461
|
+
<a id="__codelineno-0-668" name="__codelineno-0-668"></a><span class="sd"> Validate `value` and raise ValidationError if necessary.</span>
|
|
10462
|
+
<a id="__codelineno-0-669" name="__codelineno-0-669"></a><span class="sd"> """</span>
|
|
10463
|
+
<a id="__codelineno-0-670" name="__codelineno-0-670"></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>
|
|
10464
|
+
<a id="__codelineno-0-671" name="__codelineno-0-671"></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
|
10465
|
+
<a id="__codelineno-0-672" name="__codelineno-0-672"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
|
10466
|
+
<a id="__codelineno-0-673" name="__codelineno-0-673"></a> <span class="k">try</span><span class="p">:</span>
|
|
10467
|
+
<a id="__codelineno-0-674" name="__codelineno-0-674"></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">item</span><span class="p">)</span>
|
|
10468
|
+
<a id="__codelineno-0-675" name="__codelineno-0-675"></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
|
10469
|
+
<a id="__codelineno-0-676" name="__codelineno-0-676"></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
10470
|
+
<a id="__codelineno-0-677" name="__codelineno-0-677"></a> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
|
10471
|
+
<a id="__codelineno-0-678" name="__codelineno-0-678"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
|
10542
10472
|
</code></pre></div></td></tr></table></div>
|
|
10543
10473
|
</details>
|
|
10544
10474
|
</div>
|
|
@@ -10573,7 +10503,9 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10573
10503
|
|
|
10574
10504
|
<details class="quote">
|
|
10575
10505
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10576
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10506
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-587">587</a></span>
|
|
10507
|
+
<span class="normal"><a href="#__codelineno-0-588">588</a></span>
|
|
10508
|
+
<span class="normal"><a href="#__codelineno-0-589">589</a></span>
|
|
10577
10509
|
<span class="normal"><a href="#__codelineno-0-590">590</a></span>
|
|
10578
10510
|
<span class="normal"><a href="#__codelineno-0-591">591</a></span>
|
|
10579
10511
|
<span class="normal"><a href="#__codelineno-0-592">592</a></span>
|
|
@@ -10593,31 +10525,29 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10593
10525
|
<span class="normal"><a href="#__codelineno-0-606">606</a></span>
|
|
10594
10526
|
<span class="normal"><a href="#__codelineno-0-607">607</a></span>
|
|
10595
10527
|
<span class="normal"><a href="#__codelineno-0-608">608</a></span>
|
|
10596
|
-
<span class="normal"><a href="#__codelineno-0-609">609</a></span>
|
|
10597
|
-
<
|
|
10598
|
-
<
|
|
10599
|
-
<a id="__codelineno-0-590" name="__codelineno-0-590"></a><span class="
|
|
10600
|
-
<a id="__codelineno-0-591" name="__codelineno-0-591"></a
|
|
10601
|
-
<a id="__codelineno-0-592" name="__codelineno-0-592"></a><span class="
|
|
10602
|
-
<a id="__codelineno-0-593" name="__codelineno-0-593"></a>
|
|
10603
|
-
<a id="__codelineno-0-594" name="__codelineno-0-594"></a>
|
|
10604
|
-
<a id="__codelineno-0-595" name="__codelineno-0-595"></a>
|
|
10605
|
-
<a id="__codelineno-0-596" name="__codelineno-0-596"></a>
|
|
10606
|
-
<a id="__codelineno-0-597" name="__codelineno-0-597"></a>
|
|
10607
|
-
<a id="__codelineno-0-598" name="__codelineno-0-598"></a>
|
|
10608
|
-
<a id="__codelineno-0-599" name="__codelineno-0-599"></a>
|
|
10609
|
-
<a id="__codelineno-0-600" name="__codelineno-0-600"></a>
|
|
10610
|
-
<a id="__codelineno-0-601" name="__codelineno-0-601"></a> <span class="k">if</span> <span class="
|
|
10611
|
-
<a id="__codelineno-0-602" name="__codelineno-0-602"></a> <span class="k">return</span> <span class="
|
|
10612
|
-
<a id="__codelineno-0-603" name="__codelineno-0-603"></a> <span class="k">
|
|
10613
|
-
<a id="__codelineno-0-604" name="__codelineno-0-604"></a>
|
|
10614
|
-
<a id="__codelineno-0-605" name="__codelineno-0-605"></a>
|
|
10615
|
-
<a id="__codelineno-0-606" name="__codelineno-0-606"></a>
|
|
10616
|
-
<a id="__codelineno-0-607" name="__codelineno-0-607"></a>
|
|
10617
|
-
<a id="__codelineno-0-608" name="__codelineno-0-608"></a>
|
|
10618
|
-
<a id="__codelineno-0-609" name="__codelineno-0-609"></a> <span class="k">
|
|
10619
|
-
<a id="__codelineno-0-610" name="__codelineno-0-610"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
10620
|
-
<a id="__codelineno-0-611" name="__codelineno-0-611"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bound_data</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">initial</span><span class="p">)</span>
|
|
10528
|
+
<span class="normal"><a href="#__codelineno-0-609">609</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-587" name="__codelineno-0-587"></a><span class="k">class</span> <span class="nc">JSONField</span><span class="p">(</span><span class="n">_JSONField</span><span class="p">):</span>
|
|
10529
|
+
<a id="__codelineno-0-588" name="__codelineno-0-588"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10530
|
+
<a id="__codelineno-0-589" name="__codelineno-0-589"></a><span class="sd"> Custom wrapper around Django's built-in JSONField to avoid presenting "null" as the default text.</span>
|
|
10531
|
+
<a id="__codelineno-0-590" name="__codelineno-0-590"></a><span class="sd"> """</span>
|
|
10532
|
+
<a id="__codelineno-0-591" name="__codelineno-0-591"></a>
|
|
10533
|
+
<a id="__codelineno-0-592" name="__codelineno-0-592"></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>
|
|
10534
|
+
<a id="__codelineno-0-593" name="__codelineno-0-593"></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>
|
|
10535
|
+
<a id="__codelineno-0-594" name="__codelineno-0-594"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span><span class="p">:</span>
|
|
10536
|
+
<a id="__codelineno-0-595" name="__codelineno-0-595"></a> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span> <span class="o">=</span> <span class="s1">'Enter context data in <a href="https://json.org/">JSON</a> format.'</span>
|
|
10537
|
+
<a id="__codelineno-0-596" name="__codelineno-0-596"></a> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s2">"placeholder"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span>
|
|
10538
|
+
<a id="__codelineno-0-597" name="__codelineno-0-597"></a>
|
|
10539
|
+
<a id="__codelineno-0-598" name="__codelineno-0-598"></a> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
10540
|
+
<a id="__codelineno-0-599" name="__codelineno-0-599"></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="n">InvalidJSONInput</span><span class="p">):</span>
|
|
10541
|
+
<a id="__codelineno-0-600" name="__codelineno-0-600"></a> <span class="k">return</span> <span class="n">value</span>
|
|
10542
|
+
<a id="__codelineno-0-601" name="__codelineno-0-601"></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
10543
|
+
<a id="__codelineno-0-602" name="__codelineno-0-602"></a> <span class="k">return</span> <span class="s2">""</span>
|
|
10544
|
+
<a id="__codelineno-0-603" name="__codelineno-0-603"></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">value</span><span class="p">,</span> <span class="n">sort_keys</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">ensure_ascii</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
10545
|
+
<a id="__codelineno-0-604" name="__codelineno-0-604"></a>
|
|
10546
|
+
<a id="__codelineno-0-605" name="__codelineno-0-605"></a> <span class="c1"># TODO: remove this when we upgrade to Django 4</span>
|
|
10547
|
+
<a id="__codelineno-0-606" name="__codelineno-0-606"></a> <span class="k">def</span> <span class="nf">bound_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">initial</span><span class="p">):</span>
|
|
10548
|
+
<a id="__codelineno-0-607" name="__codelineno-0-607"></a> <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
10549
|
+
<a id="__codelineno-0-608" name="__codelineno-0-608"></a> <span class="k">return</span> <span class="kc">None</span>
|
|
10550
|
+
<a id="__codelineno-0-609" name="__codelineno-0-609"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bound_data</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">initial</span><span class="p">)</span>
|
|
10621
10551
|
</code></pre></div></td></tr></table></div>
|
|
10622
10552
|
</details>
|
|
10623
10553
|
|
|
@@ -10662,19 +10592,19 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10662
10592
|
|
|
10663
10593
|
<details class="quote">
|
|
10664
10594
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10665
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10595
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-578">578</a></span>
|
|
10596
|
+
<span class="normal"><a href="#__codelineno-0-579">579</a></span>
|
|
10597
|
+
<span class="normal"><a href="#__codelineno-0-580">580</a></span>
|
|
10666
10598
|
<span class="normal"><a href="#__codelineno-0-581">581</a></span>
|
|
10667
10599
|
<span class="normal"><a href="#__codelineno-0-582">582</a></span>
|
|
10668
10600
|
<span class="normal"><a href="#__codelineno-0-583">583</a></span>
|
|
10669
|
-
<span class="normal"><a href="#__codelineno-0-584">584</a></span>
|
|
10670
|
-
<
|
|
10671
|
-
<
|
|
10672
|
-
<a id="__codelineno-0-581" name="__codelineno-0-581"></a><span class="
|
|
10673
|
-
<a id="__codelineno-0-582" name="__codelineno-0-582"></a><span class="sd">
|
|
10674
|
-
<a id="__codelineno-0-583" name="__codelineno-0-583"></a
|
|
10675
|
-
<a id="__codelineno-0-584" name="__codelineno-0-584"></a><span class="
|
|
10676
|
-
<a id="__codelineno-0-585" name="__codelineno-0-585"></a>
|
|
10677
|
-
<a id="__codelineno-0-586" name="__codelineno-0-586"></a> <span class="n">default_validators</span> <span class="o">=</span> <span class="p">[</span><span class="n">validators</span><span class="o">.</span><span class="n">EnhancedURLValidator</span><span class="p">()]</span>
|
|
10601
|
+
<span class="normal"><a href="#__codelineno-0-584">584</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-578" name="__codelineno-0-578"></a><span class="k">class</span> <span class="nc">LaxURLField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">URLField</span><span class="p">):</span>
|
|
10602
|
+
<a id="__codelineno-0-579" name="__codelineno-0-579"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10603
|
+
<a id="__codelineno-0-580" name="__codelineno-0-580"></a><span class="sd"> Modifies Django's built-in URLField to remove the requirement for fully-qualified domain names</span>
|
|
10604
|
+
<a id="__codelineno-0-581" name="__codelineno-0-581"></a><span class="sd"> (e.g. http://myserver/ is valid)</span>
|
|
10605
|
+
<a id="__codelineno-0-582" name="__codelineno-0-582"></a><span class="sd"> """</span>
|
|
10606
|
+
<a id="__codelineno-0-583" name="__codelineno-0-583"></a>
|
|
10607
|
+
<a id="__codelineno-0-584" name="__codelineno-0-584"></a> <span class="n">default_validators</span> <span class="o">=</span> <span class="p">[</span><span class="n">validators</span><span class="o">.</span><span class="n">EnhancedURLValidator</span><span class="p">()]</span>
|
|
10678
10608
|
</code></pre></div></td></tr></table></div>
|
|
10679
10609
|
</details>
|
|
10680
10610
|
|
|
@@ -10719,7 +10649,9 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10719
10649
|
|
|
10720
10650
|
<details class="quote">
|
|
10721
10651
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10722
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10652
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-716">716</a></span>
|
|
10653
|
+
<span class="normal"><a href="#__codelineno-0-717">717</a></span>
|
|
10654
|
+
<span class="normal"><a href="#__codelineno-0-718">718</a></span>
|
|
10723
10655
|
<span class="normal"><a href="#__codelineno-0-719">719</a></span>
|
|
10724
10656
|
<span class="normal"><a href="#__codelineno-0-720">720</a></span>
|
|
10725
10657
|
<span class="normal"><a href="#__codelineno-0-721">721</a></span>
|
|
@@ -10772,64 +10704,62 @@ if the data can't be converted. Return the converted value.</p>
|
|
|
10772
10704
|
<span class="normal"><a href="#__codelineno-0-768">768</a></span>
|
|
10773
10705
|
<span class="normal"><a href="#__codelineno-0-769">769</a></span>
|
|
10774
10706
|
<span class="normal"><a href="#__codelineno-0-770">770</a></span>
|
|
10775
|
-
<span class="normal"><a href="#__codelineno-0-771">771</a></span>
|
|
10776
|
-
<
|
|
10777
|
-
<
|
|
10778
|
-
<a id="__codelineno-0-719" name="__codelineno-0-719"></a
|
|
10779
|
-
<a id="__codelineno-0-720" name="__codelineno-0-720"></a><span class="sd">
|
|
10780
|
-
<a id="__codelineno-0-721" name="__codelineno-0-721"></a>
|
|
10781
|
-
<a id="__codelineno-0-722" name="__codelineno-0-722"></a
|
|
10782
|
-
<a id="__codelineno-0-723" name="__codelineno-0-723"></a><span class="
|
|
10783
|
-
<a id="__codelineno-0-724" name="__codelineno-0-724"></a>
|
|
10784
|
-
<a id="__codelineno-0-725" name="__codelineno-0-725"></a>
|
|
10785
|
-
<a id="__codelineno-0-726" name="__codelineno-0-726"></a> <span class="
|
|
10786
|
-
<a id="__codelineno-0-727" name="__codelineno-0-727"></a>
|
|
10787
|
-
<a id="__codelineno-0-728" name="__codelineno-0-728"></a>
|
|
10788
|
-
<a id="__codelineno-0-729" name="__codelineno-0-729"></a>
|
|
10789
|
-
<a id="__codelineno-0-730" name="__codelineno-0-730"></a>
|
|
10790
|
-
<a id="__codelineno-0-731" name="__codelineno-0-731"></a>
|
|
10791
|
-
<a id="__codelineno-0-732" name="__codelineno-0-732"></a
|
|
10792
|
-
<a id="__codelineno-0-733" name="__codelineno-0-733"></a><span class="
|
|
10793
|
-
<a id="__codelineno-0-734" name="__codelineno-0-734"></a><span class="sd">
|
|
10794
|
-
<a id="__codelineno-0-735" name="__codelineno-0-735"></a><span class="sd">
|
|
10795
|
-
<a id="__codelineno-0-736" name="__codelineno-0-736"></a><span class="
|
|
10796
|
-
<a id="__codelineno-0-737" name="__codelineno-0-737"></a
|
|
10797
|
-
<a id="__codelineno-0-738" name="__codelineno-0-738"></a>
|
|
10798
|
-
<a id="__codelineno-0-739" name="__codelineno-0-739"></a> <span class="
|
|
10799
|
-
<a id="__codelineno-0-740" name="__codelineno-0-740"></a>
|
|
10800
|
-
<a id="__codelineno-0-741" name="__codelineno-0-741"></a> <span class="
|
|
10801
|
-
<a id="__codelineno-0-742" name="__codelineno-0-742"></a>
|
|
10802
|
-
<a id="__codelineno-0-743" name="__codelineno-0-743"></a> <span class="k">
|
|
10803
|
-
<a id="__codelineno-0-744" name="__codelineno-0-744"></a> <span class="
|
|
10804
|
-
<a id="__codelineno-0-745" name="__codelineno-0-745"></a>
|
|
10805
|
-
<a id="__codelineno-0-746" name="__codelineno-0-746"></a>
|
|
10806
|
-
<a id="__codelineno-0-747" name="__codelineno-0-747"></a>
|
|
10807
|
-
<a id="__codelineno-0-748" name="__codelineno-0-748"></a>
|
|
10808
|
-
<a id="__codelineno-0-749" name="__codelineno-0-749"></a>
|
|
10809
|
-
<a id="__codelineno-0-750" name="__codelineno-0-750"></a>
|
|
10810
|
-
<a id="__codelineno-0-751" name="__codelineno-0-751"></a> <span class="n">
|
|
10811
|
-
<a id="__codelineno-0-752" name="__codelineno-0-752"></a>
|
|
10812
|
-
<a id="__codelineno-0-753" name="__codelineno-0-753"></a>
|
|
10813
|
-
<a id="__codelineno-0-754" name="__codelineno-0-754"></a>
|
|
10814
|
-
<a id="__codelineno-0-755" name="__codelineno-0-755"></a>
|
|
10815
|
-
<a id="__codelineno-0-756" name="__codelineno-0-756"></a>
|
|
10816
|
-
<a id="__codelineno-0-757" name="__codelineno-0-757"></a> <span class="n">
|
|
10817
|
-
<a id="__codelineno-0-758" name="__codelineno-0-758"></a>
|
|
10818
|
-
<a id="__codelineno-0-759" name="__codelineno-0-759"></a>
|
|
10819
|
-
<a id="__codelineno-0-760" name="__codelineno-0-760"></a>
|
|
10820
|
-
<a id="__codelineno-0-761" name="__codelineno-0-761"></a>
|
|
10821
|
-
<a id="__codelineno-0-762" name="__codelineno-0-762"></a>
|
|
10822
|
-
<a id="__codelineno-0-763" name="__codelineno-0-763"></a>
|
|
10823
|
-
<a id="__codelineno-0-764" name="__codelineno-0-764"></a> <span class="
|
|
10824
|
-
<a id="__codelineno-0-765" name="__codelineno-0-765"></a>
|
|
10825
|
-
<a id="__codelineno-0-766" name="__codelineno-0-766"></a>
|
|
10826
|
-
<a id="__codelineno-0-767" name="__codelineno-0-767"></a>
|
|
10827
|
-
<a id="__codelineno-0-768" name="__codelineno-0-768"></a> <span class="n">
|
|
10828
|
-
<a id="__codelineno-0-769" name="__codelineno-0-769"></a> <span class="
|
|
10829
|
-
<a id="__codelineno-0-770" name="__codelineno-0-770"></a>
|
|
10830
|
-
<a id="__codelineno-0-771" name="__codelineno-0-771"></a> <span class="k">
|
|
10831
|
-
<a id="__codelineno-0-772" name="__codelineno-0-772"></a> <span class="n">result</span> <span class="o">+=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">null_value</span><span class="p">]</span>
|
|
10832
|
-
<a id="__codelineno-0-773" name="__codelineno-0-773"></a> <span class="k">return</span> <span class="n">result</span>
|
|
10707
|
+
<span class="normal"><a href="#__codelineno-0-771">771</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-716" name="__codelineno-0-716"></a><span class="k">class</span> <span class="nc">MultiMatchModelMultipleChoiceField</span><span class="p">(</span><span class="n">DynamicModelChoiceMixin</span><span class="p">,</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">ModelMultipleChoiceField</span><span class="p">):</span>
|
|
10708
|
+
<a id="__codelineno-0-717" name="__codelineno-0-717"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10709
|
+
<a id="__codelineno-0-718" name="__codelineno-0-718"></a><span class="sd"> Filter field to support matching on the PK *or* `to_field_name` fields (defaulting to `slug` if not specified).</span>
|
|
10710
|
+
<a id="__codelineno-0-719" name="__codelineno-0-719"></a>
|
|
10711
|
+
<a id="__codelineno-0-720" name="__codelineno-0-720"></a><span class="sd"> Raises ValidationError if none of the fields match the requested value.</span>
|
|
10712
|
+
<a id="__codelineno-0-721" name="__codelineno-0-721"></a><span class="sd"> """</span>
|
|
10713
|
+
<a id="__codelineno-0-722" name="__codelineno-0-722"></a>
|
|
10714
|
+
<a id="__codelineno-0-723" name="__codelineno-0-723"></a> <span class="nb">filter</span> <span class="o">=</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">ModelMultipleChoiceFilter</span>
|
|
10715
|
+
<a id="__codelineno-0-724" name="__codelineno-0-724"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">widgets</span><span class="o">.</span><span class="n">APISelectMultiple</span>
|
|
10716
|
+
<a id="__codelineno-0-725" name="__codelineno-0-725"></a>
|
|
10717
|
+
<a id="__codelineno-0-726" name="__codelineno-0-726"></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>
|
|
10718
|
+
<a id="__codelineno-0-727" name="__codelineno-0-727"></a> <span class="bp">self</span><span class="o">.</span><span class="n">natural_key</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"to_field_name"</span><span class="p">,</span> <span class="s2">"slug"</span><span class="p">)</span>
|
|
10719
|
+
<a id="__codelineno-0-728" name="__codelineno-0-728"></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>
|
|
10720
|
+
<a id="__codelineno-0-729" name="__codelineno-0-729"></a>
|
|
10721
|
+
<a id="__codelineno-0-730" name="__codelineno-0-730"></a> <span class="k">def</span> <span class="nf">_check_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
|
|
10722
|
+
<a id="__codelineno-0-731" name="__codelineno-0-731"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10723
|
+
<a id="__codelineno-0-732" name="__codelineno-0-732"></a><span class="sd"> This method overloads the grandparent method in `django.forms.models.ModelMultipleChoiceField`,</span>
|
|
10724
|
+
<a id="__codelineno-0-733" name="__codelineno-0-733"></a><span class="sd"> re-using some of that method's existing logic and adding support for coupling this field with</span>
|
|
10725
|
+
<a id="__codelineno-0-734" name="__codelineno-0-734"></a><span class="sd"> multiple model fields.</span>
|
|
10726
|
+
<a id="__codelineno-0-735" name="__codelineno-0-735"></a><span class="sd"> """</span>
|
|
10727
|
+
<a id="__codelineno-0-736" name="__codelineno-0-736"></a> <span class="n">null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_label</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">values</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_value</span> <span class="ow">in</span> <span class="n">values</span>
|
|
10728
|
+
<a id="__codelineno-0-737" name="__codelineno-0-737"></a> <span class="k">if</span> <span class="n">null</span><span class="p">:</span>
|
|
10729
|
+
<a id="__codelineno-0-738" name="__codelineno-0-738"></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">v</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">values</span> <span class="k">if</span> <span class="n">v</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_value</span><span class="p">]</span>
|
|
10730
|
+
<a id="__codelineno-0-739" name="__codelineno-0-739"></a> <span class="c1"># deduplicate given values to avoid creating many querysets or</span>
|
|
10731
|
+
<a id="__codelineno-0-740" name="__codelineno-0-740"></a> <span class="c1"># requiring the database backend deduplicate efficiently.</span>
|
|
10732
|
+
<a id="__codelineno-0-741" name="__codelineno-0-741"></a> <span class="k">try</span><span class="p">:</span>
|
|
10733
|
+
<a id="__codelineno-0-742" name="__codelineno-0-742"></a> <span class="n">values</span> <span class="o">=</span> <span class="nb">frozenset</span><span class="p">(</span><span class="n">values</span><span class="p">)</span>
|
|
10734
|
+
<a id="__codelineno-0-743" name="__codelineno-0-743"></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
|
|
10735
|
+
<a id="__codelineno-0-744" name="__codelineno-0-744"></a> <span class="c1"># list of lists isn't hashable, for example</span>
|
|
10736
|
+
<a id="__codelineno-0-745" name="__codelineno-0-745"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span>
|
|
10737
|
+
<a id="__codelineno-0-746" name="__codelineno-0-746"></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s2">"invalid_list"</span><span class="p">],</span>
|
|
10738
|
+
<a id="__codelineno-0-747" name="__codelineno-0-747"></a> <span class="n">code</span><span class="o">=</span><span class="s2">"invalid_list"</span><span class="p">,</span>
|
|
10739
|
+
<a id="__codelineno-0-748" name="__codelineno-0-748"></a> <span class="p">)</span>
|
|
10740
|
+
<a id="__codelineno-0-749" name="__codelineno-0-749"></a> <span class="n">pk_values</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
10741
|
+
<a id="__codelineno-0-750" name="__codelineno-0-750"></a> <span class="n">natural_key_values</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
10742
|
+
<a id="__codelineno-0-751" name="__codelineno-0-751"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
|
|
10743
|
+
<a id="__codelineno-0-752" name="__codelineno-0-752"></a> <span class="n">query</span> <span class="o">=</span> <span class="n">Q</span><span class="p">()</span>
|
|
10744
|
+
<a id="__codelineno-0-753" name="__codelineno-0-753"></a> <span class="k">if</span> <span class="n">data_utils</span><span class="o">.</span><span class="n">is_uuid</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
|
|
10745
|
+
<a id="__codelineno-0-754" name="__codelineno-0-754"></a> <span class="n">pk_values</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
|
|
10746
|
+
<a id="__codelineno-0-755" name="__codelineno-0-755"></a> <span class="n">query</span> <span class="o">|=</span> <span class="n">Q</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">item</span><span class="p">)</span>
|
|
10747
|
+
<a id="__codelineno-0-756" name="__codelineno-0-756"></a> <span class="k">else</span><span class="p">:</span>
|
|
10748
|
+
<a id="__codelineno-0-757" name="__codelineno-0-757"></a> <span class="n">natural_key_values</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
|
|
10749
|
+
<a id="__codelineno-0-758" name="__codelineno-0-758"></a> <span class="n">query</span> <span class="o">|=</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="bp">self</span><span class="o">.</span><span class="n">natural_key</span><span class="p">:</span> <span class="n">item</span><span class="p">})</span>
|
|
10750
|
+
<a id="__codelineno-0-759" name="__codelineno-0-759"></a> <span class="n">qs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
10751
|
+
<a id="__codelineno-0-760" name="__codelineno-0-760"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">qs</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
10752
|
+
<a id="__codelineno-0-761" name="__codelineno-0-761"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span>
|
|
10753
|
+
<a id="__codelineno-0-762" name="__codelineno-0-762"></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s2">"invalid_choice"</span><span class="p">],</span>
|
|
10754
|
+
<a id="__codelineno-0-763" name="__codelineno-0-763"></a> <span class="n">code</span><span class="o">=</span><span class="s2">"invalid_choice"</span><span class="p">,</span>
|
|
10755
|
+
<a id="__codelineno-0-764" name="__codelineno-0-764"></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="n">item</span><span class="p">},</span>
|
|
10756
|
+
<a id="__codelineno-0-765" name="__codelineno-0-765"></a> <span class="p">)</span>
|
|
10757
|
+
<a id="__codelineno-0-766" name="__codelineno-0-766"></a> <span class="n">query</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">pk__in</span><span class="o">=</span><span class="n">pk_values</span><span class="p">)</span> <span class="o">|</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">natural_key</span><span class="si">}</span><span class="s2">__in"</span><span class="p">:</span> <span class="n">natural_key_values</span><span class="p">})</span>
|
|
10758
|
+
<a id="__codelineno-0-767" name="__codelineno-0-767"></a> <span class="n">qs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
10759
|
+
<a id="__codelineno-0-768" name="__codelineno-0-768"></a> <span class="n">result</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">qs</span><span class="p">)</span>
|
|
10760
|
+
<a id="__codelineno-0-769" name="__codelineno-0-769"></a> <span class="k">if</span> <span class="n">null</span><span class="p">:</span>
|
|
10761
|
+
<a id="__codelineno-0-770" name="__codelineno-0-770"></a> <span class="n">result</span> <span class="o">+=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">null_value</span><span class="p">]</span>
|
|
10762
|
+
<a id="__codelineno-0-771" name="__codelineno-0-771"></a> <span class="k">return</span> <span class="n">result</span>
|
|
10833
10763
|
</code></pre></div></td></tr></table></div>
|
|
10834
10764
|
</details>
|
|
10835
10765
|
|
|
@@ -10874,7 +10804,9 @@ Press enter to complete an input.</p>
|
|
|
10874
10804
|
|
|
10875
10805
|
<details class="quote">
|
|
10876
10806
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
10877
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10807
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-247">247</a></span>
|
|
10808
|
+
<span class="normal"><a href="#__codelineno-0-248">248</a></span>
|
|
10809
|
+
<span class="normal"><a href="#__codelineno-0-249">249</a></span>
|
|
10878
10810
|
<span class="normal"><a href="#__codelineno-0-250">250</a></span>
|
|
10879
10811
|
<span class="normal"><a href="#__codelineno-0-251">251</a></span>
|
|
10880
10812
|
<span class="normal"><a href="#__codelineno-0-252">252</a></span>
|
|
@@ -10904,41 +10836,39 @@ Press enter to complete an input.</p>
|
|
|
10904
10836
|
<span class="normal"><a href="#__codelineno-0-276">276</a></span>
|
|
10905
10837
|
<span class="normal"><a href="#__codelineno-0-277">277</a></span>
|
|
10906
10838
|
<span class="normal"><a href="#__codelineno-0-278">278</a></span>
|
|
10907
|
-
<span class="normal"><a href="#__codelineno-0-279">279</a></span>
|
|
10908
|
-
<
|
|
10909
|
-
<
|
|
10910
|
-
<a id="__codelineno-0-250" name="__codelineno-0-250"></a><span class="
|
|
10911
|
-
<a id="__codelineno-0-251" name="__codelineno-0-251"></a><span class="sd">
|
|
10912
|
-
<a id="__codelineno-0-252" name="__codelineno-0-252"></a
|
|
10913
|
-
<a id="__codelineno-0-253" name="__codelineno-0-253"></a><span class="
|
|
10839
|
+
<span class="normal"><a href="#__codelineno-0-279">279</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-247" name="__codelineno-0-247"></a><span class="k">class</span> <span class="nc">MultiValueCharField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">):</span>
|
|
10840
|
+
<a id="__codelineno-0-248" name="__codelineno-0-248"></a><span class="w"> </span><span class="sd">"""</span>
|
|
10841
|
+
<a id="__codelineno-0-249" name="__codelineno-0-249"></a><span class="sd"> CharField that takes multiple user character inputs and render them as tags in the form field.</span>
|
|
10842
|
+
<a id="__codelineno-0-250" name="__codelineno-0-250"></a><span class="sd"> Press enter to complete an input.</span>
|
|
10843
|
+
<a id="__codelineno-0-251" name="__codelineno-0-251"></a><span class="sd"> """</span>
|
|
10844
|
+
<a id="__codelineno-0-252" name="__codelineno-0-252"></a>
|
|
10845
|
+
<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">widgets</span><span class="o">.</span><span class="n">MultiValueCharInput</span><span class="p">()</span>
|
|
10914
10846
|
<a id="__codelineno-0-254" name="__codelineno-0-254"></a>
|
|
10915
|
-
<a id="__codelineno-0-255" name="__codelineno-0-255"></a> <span class="
|
|
10916
|
-
<a id="__codelineno-0-256" name="__codelineno-0-256"></a>
|
|
10917
|
-
<a id="__codelineno-0-257" name="__codelineno-0-257"></a>
|
|
10918
|
-
<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="n">
|
|
10919
|
-
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="
|
|
10920
|
-
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="
|
|
10921
|
-
<a id="__codelineno-0-261" name="__codelineno-0-261"></a>
|
|
10922
|
-
<a id="__codelineno-0-262" name="__codelineno-0-262"></a>
|
|
10923
|
-
<a id="__codelineno-0-263" name="__codelineno-0-263"></a>
|
|
10847
|
+
<a id="__codelineno-0-255" name="__codelineno-0-255"></a> <span class="k">def</span> <span class="nf">get_bound_field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">form</span><span class="p">,</span> <span class="n">field_name</span><span class="p">):</span>
|
|
10848
|
+
<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="n">bound_field</span> <span class="o">=</span> <span class="n">BoundField</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">field_name</span><span class="p">)</span>
|
|
10849
|
+
<a id="__codelineno-0-257" name="__codelineno-0-257"></a> <span class="n">value</span> <span class="o">=</span> <span class="n">bound_field</span><span class="o">.</span><span class="n">value</span><span class="p">()</span>
|
|
10850
|
+
<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="n">widget</span> <span class="o">=</span> <span class="n">bound_field</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">widget</span>
|
|
10851
|
+
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="c1"># Save the selected choices in the widget even after the filterform is submitted</span>
|
|
10852
|
+
<a id="__codelineno-0-260" name="__codelineno-0-260"></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>
|
|
10853
|
+
<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="n">widget</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="p">[(</span><span class="n">v</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>
|
|
10854
|
+
<a id="__codelineno-0-262" name="__codelineno-0-262"></a>
|
|
10855
|
+
<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="k">return</span> <span class="n">bound_field</span>
|
|
10924
10856
|
<a id="__codelineno-0-264" name="__codelineno-0-264"></a>
|
|
10925
|
-
<a id="__codelineno-0-265" name="__codelineno-0-265"></a>
|
|
10926
|
-
<a id="__codelineno-0-266" name="__codelineno-0-266"></a>
|
|
10927
|
-
<a id="__codelineno-0-267" name="__codelineno-0-267"></a>
|
|
10928
|
-
<a id="__codelineno-0-268" name="__codelineno-0-268"></a>
|
|
10929
|
-
<a id="__codelineno-0-269" name="__codelineno-0-269"></a>
|
|
10930
|
-
<a id="__codelineno-0-270" name="__codelineno-0-270"></a>
|
|
10931
|
-
<a id="__codelineno-0-271" name="__codelineno-0-271"></a>
|
|
10932
|
-
<a id="__codelineno-0-272" name="__codelineno-0-272"></a>
|
|
10933
|
-
<a id="__codelineno-0-273" name="__codelineno-0-273"></a>
|
|
10934
|
-
<a id="__codelineno-0-274" name="__codelineno-0-274"></a>
|
|
10935
|
-
<a id="__codelineno-0-275" name="__codelineno-0-275"></a>
|
|
10936
|
-
<a id="__codelineno-0-276" name="__codelineno-0-276"></a>
|
|
10937
|
-
<a id="__codelineno-0-277" name="__codelineno-0-277"></a> <span class="
|
|
10938
|
-
<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="
|
|
10939
|
-
<a id="__codelineno-0-279" name="__codelineno-0-279"></a>
|
|
10940
|
-
<a id="__codelineno-0-280" name="__codelineno-0-280"></a> <span class="k">if</span> <span class="n">v</span>
|
|
10941
|
-
<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="p">]</span>
|
|
10857
|
+
<a id="__codelineno-0-265" name="__codelineno-0-265"></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>
|
|
10858
|
+
<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="bp">self</span><span class="o">.</span><span class="n">field_class</span> <span class="o">=</span> <span class="n">django_forms</span><span class="o">.</span><span class="n">CharField</span>
|
|
10859
|
+
<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
|
10860
|
+
<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="k">return</span> <span class="p">[]</span>
|
|
10861
|
+
<a id="__codelineno-0-269" name="__codelineno-0-269"></a>
|
|
10862
|
+
<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="c1"># Make it a list if it's a string.</span>
|
|
10863
|
+
<a id="__codelineno-0-271" name="__codelineno-0-271"></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>
|
|
10864
|
+
<a id="__codelineno-0-272" name="__codelineno-0-272"></a> <span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
|
|
10865
|
+
<a id="__codelineno-0-273" name="__codelineno-0-273"></a>
|
|
10866
|
+
<a id="__codelineno-0-274" name="__codelineno-0-274"></a> <span class="k">return</span> <span class="p">[</span>
|
|
10867
|
+
<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="c1"># Only append non-empty values (this avoids e.g. trying to cast '' as an integer)</span>
|
|
10868
|
+
<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="bp">self</span><span class="o">.</span><span class="n">field_class</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
|
10869
|
+
<a id="__codelineno-0-277" name="__codelineno-0-277"></a> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span>
|
|
10870
|
+
<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="k">if</span> <span class="n">v</span>
|
|
10871
|
+
<a id="__codelineno-0-279" name="__codelineno-0-279"></a> <span class="p">]</span>
|
|
10942
10872
|
</code></pre></div></td></tr></table></div>
|
|
10943
10873
|
</details>
|
|
10944
10874
|
|
|
@@ -11045,7 +10975,9 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
|
|
|
11045
10975
|
|
|
11046
10976
|
<details class="quote">
|
|
11047
10977
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
11048
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
10978
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-207">207</a></span>
|
|
10979
|
+
<span class="normal"><a href="#__codelineno-0-208">208</a></span>
|
|
10980
|
+
<span class="normal"><a href="#__codelineno-0-209">209</a></span>
|
|
11049
10981
|
<span class="normal"><a href="#__codelineno-0-210">210</a></span>
|
|
11050
10982
|
<span class="normal"><a href="#__codelineno-0-211">211</a></span>
|
|
11051
10983
|
<span class="normal"><a href="#__codelineno-0-212">212</a></span>
|
|
@@ -11080,46 +11012,44 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
|
|
|
11080
11012
|
<span class="normal"><a href="#__codelineno-0-241">241</a></span>
|
|
11081
11013
|
<span class="normal"><a href="#__codelineno-0-242">242</a></span>
|
|
11082
11014
|
<span class="normal"><a href="#__codelineno-0-243">243</a></span>
|
|
11083
|
-
<span class="normal"><a href="#__codelineno-0-244">244</a></span>
|
|
11084
|
-
<
|
|
11085
|
-
<
|
|
11086
|
-
<a id="__codelineno-0-210" name="__codelineno-0-210"></a
|
|
11087
|
-
<a id="__codelineno-0-211" name="__codelineno-0-211"></a><span class="sd">
|
|
11088
|
-
<a id="__codelineno-0-212" name="__codelineno-0-212"></a>
|
|
11089
|
-
<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd">
|
|
11090
|
-
<a id="__codelineno-0-214" name="__codelineno-0-214"></a
|
|
11091
|
-
<a id="__codelineno-0-215" name="__codelineno-0-215"></a
|
|
11015
|
+
<span class="normal"><a href="#__codelineno-0-244">244</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="k">class</span> <span class="nc">MultipleContentTypeField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">ModelMultipleChoiceField</span><span class="p">):</span>
|
|
11016
|
+
<a id="__codelineno-0-208" name="__codelineno-0-208"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11017
|
+
<a id="__codelineno-0-209" name="__codelineno-0-209"></a><span class="sd"> Field for choosing any number of `ContentType` objects.</span>
|
|
11018
|
+
<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
|
|
11019
|
+
<a id="__codelineno-0-211" name="__codelineno-0-211"></a><span class="sd"> Optionally can restrict the available ContentTypes to those supporting a particular feature only.</span>
|
|
11020
|
+
<a id="__codelineno-0-212" name="__codelineno-0-212"></a><span class="sd"> Optionally can pass the selection through as a list of `{app_label}.{model}` strings instead of PK values.</span>
|
|
11021
|
+
<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd"> """</span>
|
|
11022
|
+
<a id="__codelineno-0-214" name="__codelineno-0-214"></a>
|
|
11023
|
+
<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="n">STATIC_CHOICES</span> <span class="o">=</span> <span class="kc">True</span>
|
|
11092
11024
|
<a id="__codelineno-0-216" name="__codelineno-0-216"></a>
|
|
11093
|
-
<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="n">
|
|
11094
|
-
<a id="__codelineno-0-218" name="__codelineno-0-218"></a>
|
|
11095
|
-
<a id="__codelineno-0-219" name="__codelineno-0-219"></a
|
|
11096
|
-
<a id="__codelineno-0-220" name="__codelineno-0-220"></a
|
|
11097
|
-
<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd">
|
|
11098
|
-
<a id="__codelineno-0-222" name="__codelineno-0-222"></a>
|
|
11099
|
-
<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd">
|
|
11100
|
-
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd">
|
|
11101
|
-
<a id="__codelineno-0-225" name="__codelineno-0-225"></a
|
|
11102
|
-
<a id="__codelineno-0-226" name="__codelineno-0-226"></a
|
|
11103
|
-
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="
|
|
11104
|
-
<a id="__codelineno-0-228" name="__codelineno-0-228"></a>
|
|
11105
|
-
<a id="__codelineno-0-229" name="__codelineno-0-229"></a>
|
|
11106
|
-
<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
|
|
11107
|
-
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="
|
|
11108
|
-
<a id="__codelineno-0-232" name="__codelineno-0-232"></a>
|
|
11109
|
-
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="p">
|
|
11110
|
-
<a id="__codelineno-0-234" name="__codelineno-0-234"></a>
|
|
11111
|
-
<a id="__codelineno-0-235" name="__codelineno-0-235"></a>
|
|
11112
|
-
<a id="__codelineno-0-236" name="__codelineno-0-236"></a>
|
|
11113
|
-
<a id="__codelineno-0-237" name="__codelineno-0-237"></a>
|
|
11025
|
+
<a id="__codelineno-0-217" name="__codelineno-0-217"></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">feature</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">choices_as_strings</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
11026
|
+
<a id="__codelineno-0-218" name="__codelineno-0-218"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11027
|
+
<a id="__codelineno-0-219" name="__codelineno-0-219"></a><span class="sd"> Construct a MultipleContentTypeField.</span>
|
|
11028
|
+
<a id="__codelineno-0-220" name="__codelineno-0-220"></a>
|
|
11029
|
+
<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> Args:</span>
|
|
11030
|
+
<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> feature (str): Feature name to use in constructing a FeatureQuery to restrict the available ContentTypes.</span>
|
|
11031
|
+
<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> choices_as_strings (bool): If True, render selection as a list of `"{app_label}.{model}"` strings.</span>
|
|
11032
|
+
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> """</span>
|
|
11033
|
+
<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="kn">from</span> <span class="nn">nautobot.extras</span> <span class="kn">import</span> <span class="n">utils</span> <span class="k">as</span> <span class="n">extras_utils</span>
|
|
11034
|
+
<a id="__codelineno-0-226" name="__codelineno-0-226"></a>
|
|
11035
|
+
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">if</span> <span class="s2">"queryset"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
|
11036
|
+
<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="k">if</span> <span class="n">feature</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
11037
|
+
<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"queryset"</span><span class="p">]</span> <span class="o">=</span> <span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
11038
|
+
<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="n">extras_utils</span><span class="o">.</span><span class="n">FeatureQuery</span><span class="p">(</span><span class="n">feature</span><span class="p">)</span><span class="o">.</span><span class="n">get_query</span><span class="p">()</span>
|
|
11039
|
+
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"app_label"</span><span class="p">,</span> <span class="s2">"model"</span><span class="p">)</span>
|
|
11040
|
+
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="k">else</span><span class="p">:</span>
|
|
11041
|
+
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"queryset"</span><span class="p">]</span> <span class="o">=</span> <span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"app_label"</span><span class="p">,</span> <span class="s2">"model"</span><span class="p">)</span>
|
|
11042
|
+
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="k">if</span> <span class="s2">"widget"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
|
11043
|
+
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"widget"</span><span class="p">]</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">StaticSelect2Multiple</span><span class="p">()</span>
|
|
11044
|
+
<a id="__codelineno-0-236" name="__codelineno-0-236"></a>
|
|
11045
|
+
<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="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>
|
|
11114
11046
|
<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
|
|
11115
|
-
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="
|
|
11116
|
-
<a id="__codelineno-0-240" name="__codelineno-0-240"></a>
|
|
11117
|
-
<a id="__codelineno-0-241" name="__codelineno-0-241"></a>
|
|
11118
|
-
<a id="__codelineno-0-242" name="__codelineno-0-242"></a>
|
|
11119
|
-
<a id="__codelineno-0-243" name="__codelineno-0-243"></a>
|
|
11120
|
-
<a id="__codelineno-0-244" name="__codelineno-0-244"></a>
|
|
11121
|
-
<a id="__codelineno-0-245" name="__codelineno-0-245"></a><span class="w"> </span><span class="sd">"""Overload choices to return `{app_label}.{model}` instead of PKs."""</span>
|
|
11122
|
-
<a id="__codelineno-0-246" name="__codelineno-0-246"></a> <span class="k">return</span> <span class="p">[(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">m</span><span class="o">.</span><span class="n">app_label</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">m</span><span class="o">.</span><span class="n">model</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="n">m</span><span class="o">.</span><span class="n">app_labeled_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">all</span><span class="p">()]</span>
|
|
11047
|
+
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">if</span> <span class="n">choices_as_strings</span><span class="p">:</span>
|
|
11048
|
+
<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_string_choices_from_queryset</span>
|
|
11049
|
+
<a id="__codelineno-0-241" name="__codelineno-0-241"></a>
|
|
11050
|
+
<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="k">def</span> <span class="nf">_string_choices_from_queryset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
11051
|
+
<a id="__codelineno-0-243" name="__codelineno-0-243"></a><span class="w"> </span><span class="sd">"""Overload choices to return `{app_label}.{model}` instead of PKs."""</span>
|
|
11052
|
+
<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="k">return</span> <span class="p">[(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">m</span><span class="o">.</span><span class="n">app_label</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">m</span><span class="o">.</span><span class="n">model</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="n">m</span><span class="o">.</span><span class="n">app_labeled_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="o">.</span><span class="n">all</span><span class="p">()]</span>
|
|
11123
11053
|
</code></pre></div></td></tr></table></div>
|
|
11124
11054
|
</details>
|
|
11125
11055
|
|
|
@@ -11196,7 +11126,9 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
|
|
|
11196
11126
|
|
|
11197
11127
|
<details class="quote">
|
|
11198
11128
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
11199
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
11129
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-217">217</a></span>
|
|
11130
|
+
<span class="normal"><a href="#__codelineno-0-218">218</a></span>
|
|
11131
|
+
<span class="normal"><a href="#__codelineno-0-219">219</a></span>
|
|
11200
11132
|
<span class="normal"><a href="#__codelineno-0-220">220</a></span>
|
|
11201
11133
|
<span class="normal"><a href="#__codelineno-0-221">221</a></span>
|
|
11202
11134
|
<span class="normal"><a href="#__codelineno-0-222">222</a></span>
|
|
@@ -11217,32 +11149,30 @@ Optionally can pass the selection through as a list of <code>{app_label}.{model}
|
|
|
11217
11149
|
<span class="normal"><a href="#__codelineno-0-237">237</a></span>
|
|
11218
11150
|
<span class="normal"><a href="#__codelineno-0-238">238</a></span>
|
|
11219
11151
|
<span class="normal"><a href="#__codelineno-0-239">239</a></span>
|
|
11220
|
-
<span class="normal"><a href="#__codelineno-0-240">240</a></span>
|
|
11221
|
-
<
|
|
11222
|
-
<
|
|
11223
|
-
<a id="__codelineno-0-220" name="__codelineno-0-220"></a
|
|
11224
|
-
<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd">
|
|
11225
|
-
<a id="__codelineno-0-222" name="__codelineno-0-222"></a>
|
|
11226
|
-
<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd">
|
|
11227
|
-
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd">
|
|
11228
|
-
<a id="__codelineno-0-225" name="__codelineno-0-225"></a
|
|
11229
|
-
<a id="__codelineno-0-226" name="__codelineno-0-226"></a
|
|
11230
|
-
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="
|
|
11231
|
-
<a id="__codelineno-0-228" name="__codelineno-0-228"></a>
|
|
11232
|
-
<a id="__codelineno-0-229" name="__codelineno-0-229"></a>
|
|
11233
|
-
<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
|
|
11234
|
-
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="
|
|
11235
|
-
<a id="__codelineno-0-232" name="__codelineno-0-232"></a>
|
|
11236
|
-
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="p">
|
|
11237
|
-
<a id="__codelineno-0-234" name="__codelineno-0-234"></a>
|
|
11238
|
-
<a id="__codelineno-0-235" name="__codelineno-0-235"></a>
|
|
11239
|
-
<a id="__codelineno-0-236" name="__codelineno-0-236"></a>
|
|
11240
|
-
<a id="__codelineno-0-237" name="__codelineno-0-237"></a>
|
|
11152
|
+
<span class="normal"><a href="#__codelineno-0-240">240</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-217" name="__codelineno-0-217"></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">feature</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">choices_as_strings</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
11153
|
+
<a id="__codelineno-0-218" name="__codelineno-0-218"></a><span class="w"> </span><span class="sd">"""</span>
|
|
11154
|
+
<a id="__codelineno-0-219" name="__codelineno-0-219"></a><span class="sd"> Construct a MultipleContentTypeField.</span>
|
|
11155
|
+
<a id="__codelineno-0-220" name="__codelineno-0-220"></a>
|
|
11156
|
+
<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> Args:</span>
|
|
11157
|
+
<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> feature (str): Feature name to use in constructing a FeatureQuery to restrict the available ContentTypes.</span>
|
|
11158
|
+
<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> choices_as_strings (bool): If True, render selection as a list of `"{app_label}.{model}"` strings.</span>
|
|
11159
|
+
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> """</span>
|
|
11160
|
+
<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="kn">from</span> <span class="nn">nautobot.extras</span> <span class="kn">import</span> <span class="n">utils</span> <span class="k">as</span> <span class="n">extras_utils</span>
|
|
11161
|
+
<a id="__codelineno-0-226" name="__codelineno-0-226"></a>
|
|
11162
|
+
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">if</span> <span class="s2">"queryset"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
|
11163
|
+
<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="k">if</span> <span class="n">feature</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
11164
|
+
<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"queryset"</span><span class="p">]</span> <span class="o">=</span> <span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
11165
|
+
<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="n">extras_utils</span><span class="o">.</span><span class="n">FeatureQuery</span><span class="p">(</span><span class="n">feature</span><span class="p">)</span><span class="o">.</span><span class="n">get_query</span><span class="p">()</span>
|
|
11166
|
+
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"app_label"</span><span class="p">,</span> <span class="s2">"model"</span><span class="p">)</span>
|
|
11167
|
+
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="k">else</span><span class="p">:</span>
|
|
11168
|
+
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"queryset"</span><span class="p">]</span> <span class="o">=</span> <span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"app_label"</span><span class="p">,</span> <span class="s2">"model"</span><span class="p">)</span>
|
|
11169
|
+
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="k">if</span> <span class="s2">"widget"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
|
11170
|
+
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"widget"</span><span class="p">]</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">StaticSelect2Multiple</span><span class="p">()</span>
|
|
11171
|
+
<a id="__codelineno-0-236" name="__codelineno-0-236"></a>
|
|
11172
|
+
<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="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>
|
|
11241
11173
|
<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
|
|
11242
|
-
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="
|
|
11243
|
-
<a id="__codelineno-0-240" name="__codelineno-0-240"></a>
|
|
11244
|
-
<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="k">if</span> <span class="n">choices_as_strings</span><span class="p">:</span>
|
|
11245
|
-
<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_string_choices_from_queryset</span>
|
|
11174
|
+
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">if</span> <span class="n">choices_as_strings</span><span class="p">:</span>
|
|
11175
|
+
<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_string_choices_from_queryset</span>
|
|
11246
11176
|
</code></pre></div></td></tr></table></div>
|
|
11247
11177
|
</details>
|
|
11248
11178
|
</div>
|
|
@@ -11517,23 +11447,23 @@ NoteModelFormMixin are needed.</p>
|
|
|
11517
11447
|
|
|
11518
11448
|
<details class="quote">
|
|
11519
11449
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
11520
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
11450
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-705">705</a></span>
|
|
11451
|
+
<span class="normal"><a href="#__codelineno-0-706">706</a></span>
|
|
11452
|
+
<span class="normal"><a href="#__codelineno-0-707">707</a></span>
|
|
11521
11453
|
<span class="normal"><a href="#__codelineno-0-708">708</a></span>
|
|
11522
11454
|
<span class="normal"><a href="#__codelineno-0-709">709</a></span>
|
|
11523
11455
|
<span class="normal"><a href="#__codelineno-0-710">710</a></span>
|
|
11524
11456
|
<span class="normal"><a href="#__codelineno-0-711">711</a></span>
|
|
11525
11457
|
<span class="normal"><a href="#__codelineno-0-712">712</a></span>
|
|
11526
|
-
<span class="normal"><a href="#__codelineno-0-713">713</a></span>
|
|
11527
|
-
<
|
|
11528
|
-
<
|
|
11529
|
-
<a id="__codelineno-0-708" name="__codelineno-0-708"></a><span class="
|
|
11530
|
-
<a id="__codelineno-0-709" name="__codelineno-0-709"></a>
|
|
11531
|
-
<a id="__codelineno-0-710" name="__codelineno-0-710"></a>
|
|
11532
|
-
<a id="__codelineno-0-711" name="__codelineno-0-711"></a> <span class="k">
|
|
11533
|
-
<a id="__codelineno-0-712" name="__codelineno-0-712"></a> <span class="
|
|
11534
|
-
<a id="__codelineno-0-713" name="__codelineno-0-713"></a> <span class="k">
|
|
11535
|
-
<a id="__codelineno-0-714" name="__codelineno-0-714"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
11536
|
-
<a id="__codelineno-0-715" name="__codelineno-0-715"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
11458
|
+
<span class="normal"><a href="#__codelineno-0-713">713</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-705" name="__codelineno-0-705"></a><span class="k">class</span> <span class="nc">NumericArrayField</span><span class="p">(</span><span class="n">SimpleArrayField</span><span class="p">):</span>
|
|
11459
|
+
<a id="__codelineno-0-706" name="__codelineno-0-706"></a><span class="w"> </span><span class="sd">"""Basic array field that takes comma-separated or hyphenated ranges."""</span>
|
|
11460
|
+
<a id="__codelineno-0-707" name="__codelineno-0-707"></a>
|
|
11461
|
+
<a id="__codelineno-0-708" name="__codelineno-0-708"></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>
|
|
11462
|
+
<a id="__codelineno-0-709" name="__codelineno-0-709"></a> <span class="k">try</span><span class="p">:</span>
|
|
11463
|
+
<a id="__codelineno-0-710" name="__codelineno-0-710"></a> <span class="n">value</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">forms</span><span class="o">.</span><span class="n">parse_numeric_range</span><span class="p">(</span><span class="n">value</span><span class="p">)])</span>
|
|
11464
|
+
<a id="__codelineno-0-711" name="__codelineno-0-711"></a> <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
|
11465
|
+
<a id="__codelineno-0-712" name="__codelineno-0-712"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
|
|
11466
|
+
<a id="__codelineno-0-713" name="__codelineno-0-713"></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
11537
11467
|
</code></pre></div></td></tr></table></div>
|
|
11538
11468
|
</details>
|
|
11539
11469
|
|
|
@@ -12189,7 +12119,7 @@ NoteModelFormMixin are needed.</p>
|
|
|
12189
12119
|
<a id="__codelineno-0-424" name="__codelineno-0-424"></a> <span class="p">]</span>
|
|
12190
12120
|
<a id="__codelineno-0-425" name="__codelineno-0-425"></a> <span class="n">requires_message</span> <span class="o">=</span> <span class="p">(</span>
|
|
12191
12121
|
<a id="__codelineno-0-426" name="__codelineno-0-426"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">editing</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">verbose_name_plural</span><span class="si">}</span><span class="s2"> require a </span><span class="si">{</span><span class="n">required_type_verbose_name</span><span class="si">}</span><span class="s2"> "</span>
|
|
12192
|
-
<a id="__codelineno-0-427" name="__codelineno-0-427"></a> <span class="sa">f</span><span class="s1">'for the required relationship "</span><span class="si">{</span><span class="
|
|
12122
|
+
<a id="__codelineno-0-427" name="__codelineno-0-427"></a> <span class="sa">f</span><span class="s1">'for the required relationship "</span><span class="si">{</span><span class="n">relationship</span><span class="si">!s}</span><span class="s1">"'</span>
|
|
12193
12123
|
<a id="__codelineno-0-428" name="__codelineno-0-428"></a> <span class="p">)</span>
|
|
12194
12124
|
<a id="__codelineno-0-429" name="__codelineno-0-429"></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">existing_objects</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">relationship_to_check</span><span class="p">[</span><span class="s2">"to_add"</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
12195
12125
|
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="n">relationship_data_errors</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">requires_message</span><span class="p">,</span> <span class="p">[])</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">editing</span><span class="p">))</span>
|
|
@@ -13493,7 +13423,9 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
13493
13423
|
|
|
13494
13424
|
<details class="quote">
|
|
13495
13425
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
13496
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
13426
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-416">416</a></span>
|
|
13427
|
+
<span class="normal"><a href="#__codelineno-0-417">417</a></span>
|
|
13428
|
+
<span class="normal"><a href="#__codelineno-0-418">418</a></span>
|
|
13497
13429
|
<span class="normal"><a href="#__codelineno-0-419">419</a></span>
|
|
13498
13430
|
<span class="normal"><a href="#__codelineno-0-420">420</a></span>
|
|
13499
13431
|
<span class="normal"><a href="#__codelineno-0-421">421</a></span>
|
|
@@ -13509,27 +13441,25 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
13509
13441
|
<span class="normal"><a href="#__codelineno-0-431">431</a></span>
|
|
13510
13442
|
<span class="normal"><a href="#__codelineno-0-432">432</a></span>
|
|
13511
13443
|
<span class="normal"><a href="#__codelineno-0-433">433</a></span>
|
|
13512
|
-
<span class="normal"><a href="#__codelineno-0-434">434</a></span>
|
|
13513
|
-
<
|
|
13514
|
-
<
|
|
13515
|
-
<a id="__codelineno-0-419" name="__codelineno-0-419"></a><span class="
|
|
13516
|
-
<a id="__codelineno-0-420" name="__codelineno-0-420"></a
|
|
13517
|
-
<a id="__codelineno-0-421" name="__codelineno-0-421"></a><span class="
|
|
13518
|
-
<a id="__codelineno-0-422" name="__codelineno-0-422"></a>
|
|
13519
|
-
<a id="__codelineno-0-423" name="__codelineno-0-423"></a
|
|
13520
|
-
<a id="__codelineno-0-424" name="__codelineno-0-424"></a
|
|
13521
|
-
<a id="__codelineno-0-425" name="__codelineno-0-425"></a><span class="sd">
|
|
13522
|
-
<a id="__codelineno-0-426" name="__codelineno-0-426"></a>
|
|
13523
|
-
<a id="__codelineno-0-427" name="__codelineno-0-427"></a><span class="sd">
|
|
13524
|
-
<a id="__codelineno-0-428" name="__codelineno-0-428"></a
|
|
13525
|
-
<a id="__codelineno-0-429" name="__codelineno-0-429"></a><span class="
|
|
13526
|
-
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"
|
|
13527
|
-
<a id="__codelineno-0-431" name="__codelineno-0-431"></a> <span class="
|
|
13528
|
-
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="
|
|
13529
|
-
<a id="__codelineno-0-433" name="__codelineno-0-433"></a>
|
|
13530
|
-
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="
|
|
13531
|
-
<a id="__codelineno-0-435" name="__codelineno-0-435"></a> <span class="n">slug_source</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">slug_source</span><span class="p">)</span>
|
|
13532
|
-
<a id="__codelineno-0-436" name="__codelineno-0-436"></a> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s2">"slug-source"</span><span class="p">]</span> <span class="o">=</span> <span class="n">slug_source</span>
|
|
13444
|
+
<span class="normal"><a href="#__codelineno-0-434">434</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-416" name="__codelineno-0-416"></a><span class="k">class</span> <span class="nc">SlugField</span><span class="p">(</span><span class="n">django_forms</span><span class="o">.</span><span class="n">SlugField</span><span class="p">):</span>
|
|
13445
|
+
<a id="__codelineno-0-417" name="__codelineno-0-417"></a><span class="w"> </span><span class="sd">"""</span>
|
|
13446
|
+
<a id="__codelineno-0-418" name="__codelineno-0-418"></a><span class="sd"> Extend the built-in SlugField to automatically populate from a field called `name` unless otherwise specified.</span>
|
|
13447
|
+
<a id="__codelineno-0-419" name="__codelineno-0-419"></a><span class="sd"> """</span>
|
|
13448
|
+
<a id="__codelineno-0-420" name="__codelineno-0-420"></a>
|
|
13449
|
+
<a id="__codelineno-0-421" name="__codelineno-0-421"></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">slug_source</span><span class="o">=</span><span class="s2">"name"</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>
|
|
13450
|
+
<a id="__codelineno-0-422" name="__codelineno-0-422"></a><span class="w"> </span><span class="sd">"""</span>
|
|
13451
|
+
<a id="__codelineno-0-423" name="__codelineno-0-423"></a><span class="sd"> Instantiate a SlugField.</span>
|
|
13452
|
+
<a id="__codelineno-0-424" name="__codelineno-0-424"></a>
|
|
13453
|
+
<a id="__codelineno-0-425" name="__codelineno-0-425"></a><span class="sd"> Args:</span>
|
|
13454
|
+
<a id="__codelineno-0-426" name="__codelineno-0-426"></a><span class="sd"> slug_source (str, tuple): Name of the field (or a list of field names) that will be used to suggest a slug.</span>
|
|
13455
|
+
<a id="__codelineno-0-427" name="__codelineno-0-427"></a><span class="sd"> """</span>
|
|
13456
|
+
<a id="__codelineno-0-428" name="__codelineno-0-428"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"label"</span><span class="p">,</span> <span class="s2">"Slug"</span><span class="p">)</span>
|
|
13457
|
+
<a id="__codelineno-0-429" name="__codelineno-0-429"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"help_text"</span><span class="p">,</span> <span class="s2">"URL-friendly unique shorthand"</span><span class="p">)</span>
|
|
13458
|
+
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"widget"</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">SlugWidget</span><span class="p">)</span>
|
|
13459
|
+
<a id="__codelineno-0-431" name="__codelineno-0-431"></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>
|
|
13460
|
+
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">slug_source</span><span class="p">,</span> <span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="nb">list</span><span class="p">)):</span>
|
|
13461
|
+
<a id="__codelineno-0-433" name="__codelineno-0-433"></a> <span class="n">slug_source</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">slug_source</span><span class="p">)</span>
|
|
13462
|
+
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s2">"slug-source"</span><span class="p">]</span> <span class="o">=</span> <span class="n">slug_source</span>
|
|
13533
13463
|
</code></pre></div></td></tr></table></div>
|
|
13534
13464
|
</details>
|
|
13535
13465
|
|
|
@@ -13592,7 +13522,9 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
13592
13522
|
|
|
13593
13523
|
<details class="quote">
|
|
13594
13524
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
13595
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
13525
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-421">421</a></span>
|
|
13526
|
+
<span class="normal"><a href="#__codelineno-0-422">422</a></span>
|
|
13527
|
+
<span class="normal"><a href="#__codelineno-0-423">423</a></span>
|
|
13596
13528
|
<span class="normal"><a href="#__codelineno-0-424">424</a></span>
|
|
13597
13529
|
<span class="normal"><a href="#__codelineno-0-425">425</a></span>
|
|
13598
13530
|
<span class="normal"><a href="#__codelineno-0-426">426</a></span>
|
|
@@ -13603,22 +13535,20 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
13603
13535
|
<span class="normal"><a href="#__codelineno-0-431">431</a></span>
|
|
13604
13536
|
<span class="normal"><a href="#__codelineno-0-432">432</a></span>
|
|
13605
13537
|
<span class="normal"><a href="#__codelineno-0-433">433</a></span>
|
|
13606
|
-
<span class="normal"><a href="#__codelineno-0-434">434</a></span>
|
|
13607
|
-
<
|
|
13608
|
-
<
|
|
13609
|
-
<a id="__codelineno-0-424" name="__codelineno-0-424"></a
|
|
13610
|
-
<a id="__codelineno-0-425" name="__codelineno-0-425"></a><span class="sd">
|
|
13611
|
-
<a id="__codelineno-0-426" name="__codelineno-0-426"></a>
|
|
13612
|
-
<a id="__codelineno-0-427" name="__codelineno-0-427"></a><span class="sd">
|
|
13613
|
-
<a id="__codelineno-0-428" name="__codelineno-0-428"></a
|
|
13614
|
-
<a id="__codelineno-0-429" name="__codelineno-0-429"></a><span class="
|
|
13615
|
-
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"
|
|
13616
|
-
<a id="__codelineno-0-431" name="__codelineno-0-431"></a> <span class="
|
|
13617
|
-
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="
|
|
13618
|
-
<a id="__codelineno-0-433" name="__codelineno-0-433"></a>
|
|
13619
|
-
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="
|
|
13620
|
-
<a id="__codelineno-0-435" name="__codelineno-0-435"></a> <span class="n">slug_source</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">slug_source</span><span class="p">)</span>
|
|
13621
|
-
<a id="__codelineno-0-436" name="__codelineno-0-436"></a> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s2">"slug-source"</span><span class="p">]</span> <span class="o">=</span> <span class="n">slug_source</span>
|
|
13538
|
+
<span class="normal"><a href="#__codelineno-0-434">434</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-421" name="__codelineno-0-421"></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">slug_source</span><span class="o">=</span><span class="s2">"name"</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>
|
|
13539
|
+
<a id="__codelineno-0-422" name="__codelineno-0-422"></a><span class="w"> </span><span class="sd">"""</span>
|
|
13540
|
+
<a id="__codelineno-0-423" name="__codelineno-0-423"></a><span class="sd"> Instantiate a SlugField.</span>
|
|
13541
|
+
<a id="__codelineno-0-424" name="__codelineno-0-424"></a>
|
|
13542
|
+
<a id="__codelineno-0-425" name="__codelineno-0-425"></a><span class="sd"> Args:</span>
|
|
13543
|
+
<a id="__codelineno-0-426" name="__codelineno-0-426"></a><span class="sd"> slug_source (str, tuple): Name of the field (or a list of field names) that will be used to suggest a slug.</span>
|
|
13544
|
+
<a id="__codelineno-0-427" name="__codelineno-0-427"></a><span class="sd"> """</span>
|
|
13545
|
+
<a id="__codelineno-0-428" name="__codelineno-0-428"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"label"</span><span class="p">,</span> <span class="s2">"Slug"</span><span class="p">)</span>
|
|
13546
|
+
<a id="__codelineno-0-429" name="__codelineno-0-429"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"help_text"</span><span class="p">,</span> <span class="s2">"URL-friendly unique shorthand"</span><span class="p">)</span>
|
|
13547
|
+
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"widget"</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">SlugWidget</span><span class="p">)</span>
|
|
13548
|
+
<a id="__codelineno-0-431" name="__codelineno-0-431"></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>
|
|
13549
|
+
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">slug_source</span><span class="p">,</span> <span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="nb">list</span><span class="p">)):</span>
|
|
13550
|
+
<a id="__codelineno-0-433" name="__codelineno-0-433"></a> <span class="n">slug_source</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">slug_source</span><span class="p">)</span>
|
|
13551
|
+
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s2">"slug-source"</span><span class="p">]</span> <span class="o">=</span> <span class="n">slug_source</span>
|
|
13622
13552
|
</code></pre></div></td></tr></table></div>
|
|
13623
13553
|
</details>
|
|
13624
13554
|
</div>
|
|
@@ -14026,7 +13956,9 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
14026
13956
|
|
|
14027
13957
|
<details class="quote">
|
|
14028
13958
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
14029
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
13959
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-774">774</a></span>
|
|
13960
|
+
<span class="normal"><a href="#__codelineno-0-775">775</a></span>
|
|
13961
|
+
<span class="normal"><a href="#__codelineno-0-776">776</a></span>
|
|
14030
13962
|
<span class="normal"><a href="#__codelineno-0-777">777</a></span>
|
|
14031
13963
|
<span class="normal"><a href="#__codelineno-0-778">778</a></span>
|
|
14032
13964
|
<span class="normal"><a href="#__codelineno-0-779">779</a></span>
|
|
@@ -14046,31 +13978,29 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
14046
13978
|
<span class="normal"><a href="#__codelineno-0-793">793</a></span>
|
|
14047
13979
|
<span class="normal"><a href="#__codelineno-0-794">794</a></span>
|
|
14048
13980
|
<span class="normal"><a href="#__codelineno-0-795">795</a></span>
|
|
14049
|
-
<span class="normal"><a href="#__codelineno-0-796">796</a></span>
|
|
14050
|
-
<
|
|
14051
|
-
<
|
|
14052
|
-
<a id="__codelineno-0-777" name="__codelineno-0-777"></a
|
|
14053
|
-
<a id="__codelineno-0-778" name="__codelineno-0-778"></a><span class="sd">
|
|
14054
|
-
<a id="__codelineno-0-779" name="__codelineno-0-779"></a>
|
|
14055
|
-
<a id="__codelineno-0-780" name="__codelineno-0-780"></a
|
|
14056
|
-
<a id="__codelineno-0-781" name="__codelineno-0-781"></a><span class="
|
|
14057
|
-
<a id="__codelineno-0-782" name="__codelineno-0-782"></a>
|
|
14058
|
-
<a id="__codelineno-0-783" name="__codelineno-0-783"></a>
|
|
14059
|
-
<a id="__codelineno-0-784" name="__codelineno-0-784"></a> <span class="
|
|
14060
|
-
<a id="__codelineno-0-785" name="__codelineno-0-785"></a>
|
|
14061
|
-
<a id="__codelineno-0-786" name="__codelineno-0-786"></a> <span class="
|
|
14062
|
-
<a id="__codelineno-0-787" name="__codelineno-0-787"></a>
|
|
14063
|
-
<a id="__codelineno-0-788" name="__codelineno-0-788"></a> <span class="
|
|
14064
|
-
<a id="__codelineno-0-789" name="__codelineno-0-789"></a>
|
|
14065
|
-
<a id="__codelineno-0-790" name="__codelineno-0-790"></a>
|
|
14066
|
-
<a id="__codelineno-0-791" name="__codelineno-0-791"></a> <span class="n">
|
|
14067
|
-
<a id="__codelineno-0-792" name="__codelineno-0-792"></a> <span class="n">
|
|
14068
|
-
<a id="__codelineno-0-793" name="__codelineno-0-793"></a> <span class="n">
|
|
14069
|
-
<a id="__codelineno-0-794" name="__codelineno-0-794"></a> <span class="
|
|
14070
|
-
<a id="__codelineno-0-795" name="__codelineno-0-795"></a> <span class="
|
|
14071
|
-
<a id="__codelineno-0-796" name="__codelineno-0-796"></a>
|
|
14072
|
-
<a id="__codelineno-0-797" name="__codelineno-0-797"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
14073
|
-
<a id="__codelineno-0-798" name="__codelineno-0-798"></a> <span class="p">)</span>
|
|
13981
|
+
<span class="normal"><a href="#__codelineno-0-796">796</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-774" name="__codelineno-0-774"></a><span class="k">class</span> <span class="nc">TagFilterField</span><span class="p">(</span><span class="n">DynamicModelMultipleChoiceField</span><span class="p">):</span>
|
|
13982
|
+
<a id="__codelineno-0-775" name="__codelineno-0-775"></a><span class="w"> </span><span class="sd">"""</span>
|
|
13983
|
+
<a id="__codelineno-0-776" name="__codelineno-0-776"></a><span class="sd"> A filter field for the tags of a model. Only the tags used by a model are displayed.</span>
|
|
13984
|
+
<a id="__codelineno-0-777" name="__codelineno-0-777"></a>
|
|
13985
|
+
<a id="__codelineno-0-778" name="__codelineno-0-778"></a><span class="sd"> :param model: The model of the filter</span>
|
|
13986
|
+
<a id="__codelineno-0-779" name="__codelineno-0-779"></a><span class="sd"> """</span>
|
|
13987
|
+
<a id="__codelineno-0-780" name="__codelineno-0-780"></a>
|
|
13988
|
+
<a id="__codelineno-0-781" name="__codelineno-0-781"></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">model</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">query_params</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">queryset</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>
|
|
13989
|
+
<a id="__codelineno-0-782" name="__codelineno-0-782"></a> <span class="kn">from</span> <span class="nn">nautobot.extras.models</span> <span class="kn">import</span> <span class="n">Tag</span>
|
|
13990
|
+
<a id="__codelineno-0-783" name="__codelineno-0-783"></a>
|
|
13991
|
+
<a id="__codelineno-0-784" name="__codelineno-0-784"></a> <span class="k">if</span> <span class="n">queryset</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
13992
|
+
<a id="__codelineno-0-785" name="__codelineno-0-785"></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="n">model</span><span class="p">)</span>
|
|
13993
|
+
<a id="__codelineno-0-786" name="__codelineno-0-786"></a> <span class="n">query_params</span> <span class="o">=</span> <span class="n">query_params</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
13994
|
+
<a id="__codelineno-0-787" name="__codelineno-0-787"></a> <span class="n">query_params</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">"content_types"</span><span class="p">:</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>
|
|
13995
|
+
<a id="__codelineno-0-788" name="__codelineno-0-788"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
|
13996
|
+
<a id="__codelineno-0-789" name="__codelineno-0-789"></a> <span class="n">label</span><span class="o">=</span><span class="s2">"Tags"</span><span class="p">,</span>
|
|
13997
|
+
<a id="__codelineno-0-790" name="__codelineno-0-790"></a> <span class="n">query_params</span><span class="o">=</span><span class="n">query_params</span><span class="p">,</span>
|
|
13998
|
+
<a id="__codelineno-0-791" name="__codelineno-0-791"></a> <span class="n">queryset</span><span class="o">=</span><span class="n">queryset</span><span class="p">,</span>
|
|
13999
|
+
<a id="__codelineno-0-792" name="__codelineno-0-792"></a> <span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
14000
|
+
<a id="__codelineno-0-793" name="__codelineno-0-793"></a> <span class="n">to_field_name</span><span class="o">=</span><span class="s2">"name"</span><span class="p">,</span>
|
|
14001
|
+
<a id="__codelineno-0-794" name="__codelineno-0-794"></a> <span class="o">*</span><span class="n">args</span><span class="p">,</span>
|
|
14002
|
+
<a id="__codelineno-0-795" name="__codelineno-0-795"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
14003
|
+
<a id="__codelineno-0-796" name="__codelineno-0-796"></a> <span class="p">)</span>
|
|
14074
14004
|
</code></pre></div></td></tr></table></div>
|
|
14075
14005
|
</details>
|
|
14076
14006
|
|
|
@@ -14101,7 +14031,9 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
14101
14031
|
|
|
14102
14032
|
<details class="quote">
|
|
14103
14033
|
<summary>Source code in <code>nautobot/core/forms/fields.py</code></summary>
|
|
14104
|
-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-
|
|
14034
|
+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-781">781</a></span>
|
|
14035
|
+
<span class="normal"><a href="#__codelineno-0-782">782</a></span>
|
|
14036
|
+
<span class="normal"><a href="#__codelineno-0-783">783</a></span>
|
|
14105
14037
|
<span class="normal"><a href="#__codelineno-0-784">784</a></span>
|
|
14106
14038
|
<span class="normal"><a href="#__codelineno-0-785">785</a></span>
|
|
14107
14039
|
<span class="normal"><a href="#__codelineno-0-786">786</a></span>
|
|
@@ -14114,24 +14046,22 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
14114
14046
|
<span class="normal"><a href="#__codelineno-0-793">793</a></span>
|
|
14115
14047
|
<span class="normal"><a href="#__codelineno-0-794">794</a></span>
|
|
14116
14048
|
<span class="normal"><a href="#__codelineno-0-795">795</a></span>
|
|
14117
|
-
<span class="normal"><a href="#__codelineno-0-796">796</a></span>
|
|
14118
|
-
<
|
|
14119
|
-
<
|
|
14120
|
-
<a id="__codelineno-0-784" name="__codelineno-0-784"></a> <span class="
|
|
14121
|
-
<a id="__codelineno-0-785" name="__codelineno-0-785"></a>
|
|
14122
|
-
<a id="__codelineno-0-786" name="__codelineno-0-786"></a> <span class="
|
|
14123
|
-
<a id="__codelineno-0-787" name="__codelineno-0-787"></a>
|
|
14124
|
-
<a id="__codelineno-0-788" name="__codelineno-0-788"></a> <span class="
|
|
14125
|
-
<a id="__codelineno-0-789" name="__codelineno-0-789"></a>
|
|
14126
|
-
<a id="__codelineno-0-790" name="__codelineno-0-790"></a>
|
|
14127
|
-
<a id="__codelineno-0-791" name="__codelineno-0-791"></a> <span class="n">
|
|
14128
|
-
<a id="__codelineno-0-792" name="__codelineno-0-792"></a> <span class="n">
|
|
14129
|
-
<a id="__codelineno-0-793" name="__codelineno-0-793"></a> <span class="n">
|
|
14130
|
-
<a id="__codelineno-0-794" name="__codelineno-0-794"></a> <span class="
|
|
14131
|
-
<a id="__codelineno-0-795" name="__codelineno-0-795"></a> <span class="
|
|
14132
|
-
<a id="__codelineno-0-796" name="__codelineno-0-796"></a>
|
|
14133
|
-
<a id="__codelineno-0-797" name="__codelineno-0-797"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
14134
|
-
<a id="__codelineno-0-798" name="__codelineno-0-798"></a> <span class="p">)</span>
|
|
14049
|
+
<span class="normal"><a href="#__codelineno-0-796">796</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-781" name="__codelineno-0-781"></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">model</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">query_params</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">queryset</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>
|
|
14050
|
+
<a id="__codelineno-0-782" name="__codelineno-0-782"></a> <span class="kn">from</span> <span class="nn">nautobot.extras.models</span> <span class="kn">import</span> <span class="n">Tag</span>
|
|
14051
|
+
<a id="__codelineno-0-783" name="__codelineno-0-783"></a>
|
|
14052
|
+
<a id="__codelineno-0-784" name="__codelineno-0-784"></a> <span class="k">if</span> <span class="n">queryset</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
14053
|
+
<a id="__codelineno-0-785" name="__codelineno-0-785"></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="n">model</span><span class="p">)</span>
|
|
14054
|
+
<a id="__codelineno-0-786" name="__codelineno-0-786"></a> <span class="n">query_params</span> <span class="o">=</span> <span class="n">query_params</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
14055
|
+
<a id="__codelineno-0-787" name="__codelineno-0-787"></a> <span class="n">query_params</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">"content_types"</span><span class="p">:</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>
|
|
14056
|
+
<a id="__codelineno-0-788" name="__codelineno-0-788"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
|
14057
|
+
<a id="__codelineno-0-789" name="__codelineno-0-789"></a> <span class="n">label</span><span class="o">=</span><span class="s2">"Tags"</span><span class="p">,</span>
|
|
14058
|
+
<a id="__codelineno-0-790" name="__codelineno-0-790"></a> <span class="n">query_params</span><span class="o">=</span><span class="n">query_params</span><span class="p">,</span>
|
|
14059
|
+
<a id="__codelineno-0-791" name="__codelineno-0-791"></a> <span class="n">queryset</span><span class="o">=</span><span class="n">queryset</span><span class="p">,</span>
|
|
14060
|
+
<a id="__codelineno-0-792" name="__codelineno-0-792"></a> <span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
14061
|
+
<a id="__codelineno-0-793" name="__codelineno-0-793"></a> <span class="n">to_field_name</span><span class="o">=</span><span class="s2">"name"</span><span class="p">,</span>
|
|
14062
|
+
<a id="__codelineno-0-794" name="__codelineno-0-794"></a> <span class="o">*</span><span class="n">args</span><span class="p">,</span>
|
|
14063
|
+
<a id="__codelineno-0-795" name="__codelineno-0-795"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
14064
|
+
<a id="__codelineno-0-796" name="__codelineno-0-796"></a> <span class="p">)</span>
|
|
14135
14065
|
</code></pre></div></td></tr></table></div>
|
|
14136
14066
|
</details>
|
|
14137
14067
|
</div>
|
|
@@ -14232,7 +14162,7 @@ Then verify that any requested RelationshipAssociations do not violate relations
|
|
|
14232
14162
|
<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="w"> </span><span class="sd">"""</span>
|
|
14233
14163
|
<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> Add a blank choice to the beginning of a choices list.</span>
|
|
14234
14164
|
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> """</span>
|
|
14235
|
-
<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">return</span> <span class="p">((</span><span class="kc">None</span><span class="p">,</span> <span class="s2">"---------"</span><span class="p">)
|
|
14165
|
+
<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">return</span> <span class="p">((</span><span class="kc">None</span><span class="p">,</span> <span class="s2">"---------"</span><span class="p">),</span> <span class="o">*</span><span class="nb">tuple</span><span class="p">(</span><span class="n">choices</span><span class="p">))</span>
|
|
14236
14166
|
</code></pre></div></td></tr></table></div>
|
|
14237
14167
|
</details>
|
|
14238
14168
|
</div>
|