App Code Updates for Nautobot v2¶
Update Code Import Locations¶
Most changes in code location arise from the merging of the nautobot.utilities
module into the nautobot.core
module.
Full table of code location changes
Old Module | Class/Function(s) | New Module |
---|---|---|
nautobot.core.api.utils | TreeModelSerializerMixin | nautobot.core.api.serializers |
nautobot.core.fields | (all) | nautobot.core.models.fields |
nautobot.core.forms | SearchForm | nautobot.core.forms.search |
nautobot.core.utilities | (all) | nautobot.core.views.utils |
nautobot.dcim.fields | MACAddressCharField | nautobot.core.models.fields |
nautobot.dcim.forms | MACAddressField | nautobot.core.forms |
nautobot.extras.api.customfields | CustomFieldModelSerializerMixin | nautobot.core.api.serializers |
nautobot.extras.api.relationships | RelationshipModelSerializerMixin | nautobot.core.api.serializers |
nautobot.extras.api.serializers | NautobotModelSerializer | nautobot.core.api.serializers |
nautobot.extras.api.serializers | NotesSerializerMixin | nautobot.core.api.serializers |
nautobot.extras.api.serializers | TaggedModelSerializerMixin | nautobot.extras.api.mixins |
nautobot.extras.utils | is_taggable | nautobot.core.models.utils |
nautobot.utilities.api | (all) | nautobot.core.api.utils |
nautobot.utilities.apps | (all) | nautobot.core.apps |
nautobot.utilities.checks | (all) | nautobot.core.checks |
nautobot.utilities.choices | (all) | nautobot.core.choices |
nautobot.utilities.config | (all) | nautobot.core.utils.config |
nautobot.utilities.constants | (all) | nautobot.core.constants |
nautobot.utilities.deprecation | (all) | nautobot.core.utils.deprecation |
nautobot.utilities.error_handlers | (all) | nautobot.core.views.utils |
nautobot.utilities.exceptions | (all) | nautobot.core.exceptions |
nautobot.utilities.factory | (all) | nautobot.core.factory |
nautobot.utilities.fields | (all) | nautobot.core.models.fields |
nautobot.utilities.filters | (all) | nautobot.core.filters |
nautobot.utilities.forms | (all) | nautobot.core.forms |
nautobot.utilities.git | (all) | nautobot.core.utils.git |
nautobot.utilities.logging | (all) | nautobot.core.utils.logging |
nautobot.utilities.management | (all) | nautobot.core.management |
nautobot.utilities.ordering | (all) | nautobot.core.utils.ordering |
nautobot.utilities.paginator | (all) | nautobot.core.views.paginator |
nautobot.utilities.permissions | (all) | nautobot.core.utils.permissions |
nautobot.utilities.query_functions | (all) | nautobot.core.models.query_functions |
nautobot.utilities.querysets | (all) | nautobot.core.models.querysets |
nautobot.utilities.tables | (all) | nautobot.core.tables |
nautobot.utilities.tasks | (all) | nautobot.core.tasks |
nautobot.utilities.templatetags | (all) | nautobot.core.templatetags |
nautobot.utilities.testing | (all) | nautobot.core.testing |
nautobot.utilities.tree_queries | (all) | nautobot.core.models.tree_queries |
nautobot.utilities.utils | array_to_string | nautobot.core.models.utils |
nautobot.utilities.utils | convert_querydict_to_factory_formset_acceptable_querydict | nautobot.core.utils.requests |
nautobot.utilities.utils | count_related | nautobot.core.models.querysets |
nautobot.utilities.utils | csv_format | nautobot.core.views.utils |
nautobot.utilities.utils | deepmerge | nautobot.core.utils.data |
nautobot.utilities.utils | dict_to_filter_params | nautobot.core.api.utils |
nautobot.utilities.utils | dynamic_import | nautobot.core.api.utils |
nautobot.utilities.utils | ensure_content_type_and_field_name_inquery_params | nautobot.core.utils.requests |
nautobot.utilities.utils | flatten_dict | nautobot.core.utils.data |
nautobot.utilities.utils | flatten_iterable | nautobot.core.utils.data |
nautobot.utilities.utils | foreground_color | nautobot.core.utils.color |
nautobot.utilities.utils | get_all_lookup_expr_for_field | nautobot.core.utils.filtering |
nautobot.utilities.utils | get_api_version_serializer | nautobot.core.api.utils |
nautobot.utilities.utils | get_changes_for_model | nautobot.core.utils.lookup |
nautobot.utilities.utils | get_filterset_field | nautobot.core.utils.filtering |
nautobot.utilities.utils | get_filterset_for_model | nautobot.core.utils.lookup |
nautobot.utilities.utils | get_filterable_params_from_filter_params | nautobot.core.utils.requests |
nautobot.utilities.utils | get_form_for_model | nautobot.core.utils.lookup |
nautobot.utilities.utils | get_model_from_name | nautobot.core.utils.lookup |
nautobot.utilities.utils | get_related_class_for_model | nautobot.core.utils.lookup |
nautobot.utilities.utils | get_route_for_model | nautobot.core.utils.lookup |
nautobot.utilities.utils | get_table_for_model | nautobot.core.utils.lookup |
nautobot.utilities.utils | hex_to_rgb | nautobot.core.utils.color |
nautobot.utilities.utils | is_taggable | nautobot.core.models.utils |
nautobot.utilities.utils | is_uuid | nautobot.core.utils.data |
nautobot.utilities.utils | lighten_color | nautobot.core.utils.color |
nautobot.utilities.utils | normalize_querydict | nautobot.core.utils.requests |
nautobot.utilities.utils | prepare_cloned_fields | nautobot.core.views.utils |
nautobot.utilities.utils | pretty_print_query | nautobot.core.models.utils |
nautobot.utilities.utils | render_jinja2 | nautobot.core.utils.data |
nautobot.utilities.utils | rgb_to_hex | nautobot.core.utils.color |
nautobot.utilities.utils | SerializerForAPIVersions | nautobot.core.api.utils |
nautobot.utilities.utils | serialize_object | nautobot.core.models.utils |
nautobot.utilities.utils | serialize_object_v2 | nautobot.core.models.utils |
nautobot.utilities.utils | shallow_compare_dict | nautobot.core.utils.data |
nautobot.utilities.utils | slugify_dots_to_dashes | nautobot.core.models.fields |
nautobot.utilities.utils | slugify_dashes_to_underscores | nautobot.core.models.fields |
nautobot.utilities.utils | to_meters | nautobot.core.utils.data |
nautobot.utilities.utils | UtilizationData | nautobot.core.utils.data |
nautobot.utilities.utils | versioned_serializer_selector | nautobot.core.api.utils |
nautobot.utilities.validators | (all) | nautobot.core.models.validators |
nautobot.utilities.views | (all) | nautobot.core.views.mixins |
Replace PluginMenuItem with NavMenuItem¶
In your app's navigation.py
file. If you are still using PluginMenuItem
from nautobot.extras.plugin
, you should replace those code with NavMenuGroup
, NavMenuItem
, and NavMenuTab
from nautobot.apps.ui
.
For example:
Before:
from nautobot.extras.plugins import PluginMenuItem
menu_items = (
PluginMenuItem(
link="plugins:your_app:dashboard",
link_text="Dashboard",
permissions=["your_app.view_sync"],
),
PluginMenuItem(
link="plugins:your_app:sync_list",
link_text="History",
permissions=["your_app.view_sync"],
),
PluginMenuItem(
link="plugins:your_app:synclogentry_list",
link_text="Logs",
permissions=["your_app.view_synclogentry"],
),
)
After:
from nautobot.apps.ui import NavMenuGroup, NavMenuItem, NavMenuTab
items = [
NavMenuItem(
link="plugins:your_app:dashboard",
name="Dashboard",
permissions=["your_app.view_sync"],
),
NavMenuItem(
link="plugins:your_app:sync_list",
name="History",
permissions=["your_app.view_sync"],
),
NavMenuItem(
link="plugins:your_app:synclogentry_list",
name="Logs",
permissions=["your_app.view_synclogentry"],
),
]
menu_items = (
NavMenuTab(
name="Plugins",
groups=(NavMenuGroup(name="Your App", weight=1000, items=tuple(items)),),
),
)
Replace DjangoFilterBackend with NautobotFilterBackend¶
If your REST API has any FilterBackend
classes derived from DjangoFilterBackend
, you should replace DjangoFilterBackend
with NautobotFilterBackend
.
Revamp Rest API Serializers¶
NestedSerializer
classes are no longer needed in Nautobot 2.0. If any NestedSerializers
exist for your models, you should just remove their class definitions and references.
After removing existing NestedSerializers
, you can change the fields
attribute in your serializers' class Meta
to __all__
and that will automatically include all the model's fields in the serializer, including related-model fields that would previously have required a reference to a NestedSerializer
. If you want to exclude certain fields of the model, you can specify a list of fields you want to display in the fields
attribute instead.
Include all model attributes:
class ExampleModelSerializer(NautobotModelSerializer):
"""Used for normal CRUD operations."""
url = serializers.HyperlinkedIdentityField(view_name="plugins-api:example_plugin-api:anotherexamplemodel-detail")
class Meta:
model = AnotherExampleModel
fields = "__all__"
Include only specified model attributes:
class ExampleModelSerializer(NautobotModelSerializer):
"""Used for normal CRUD operations."""
url = serializers.HyperlinkedIdentityField(view_name="plugins-api:example_plugin-api:anotherexamplemodel-detail")
class Meta:
model = AnotherExampleModel
# example_attribute_4 is not included in the serializer
fields = ["url", "example_attribute_1", "example_attribute_2", "example_attribute_3"]
In addition, the ?brief=
API query parameter is replaced by ?depth=<0-10>
. As a result, the ability to specify brief_mode
in DynamicModelChoiceField
, DynamicModelMultipleChoiceField
, and MultiMatchModelMultipleChoiceField
has also been removed. For every occurrence of the aforementioned fields where you have brief_mode
set to True/False
(e.g. brief_mode=True
), please remove the statement, leaving other occurrences of the fields where you do not have brief_mode
specified as they are. Check out our API documentation for this change.
Revamp CSV Import and Export¶
CSV Import for models are now done automatically via the Rest API. As a result of this change, CSVForms
classes are no longer needed and should be deleted. In addition, csv_headers
and to_csv
attributes should be removed from your model definition. Check out our release notes for this specific change.