Add `nested` and `max_depth` params to GenericForeignKeyAttr to render
hierarchical objects as breadcrumbs when they expose `get_ancestors()`.
Applied to scope fields in IPAM/wireless and circuit termination points.
Fixes#21938
Add changelog message support to BulkRenameView for models that support
change logging. Introduce NetBoxModelBulkRenameForm as a changelog-aware
wrapper around the existing utilities.forms.BulkRenameForm, preserving the
existing import path while avoiding circular imports.
Set _changelog_message before saving renamed objects in both MPTT and
non-MPTT rename paths, and add a regression test to verify that the
submitted message is recorded on the resulting ObjectChange records.
Remove unused VMInterfaceBulkRenameForm and VirtualDiskBulkRenameForm,
along with their unused view references, since BulkRenameView constructs
its form dynamically.
Display a warning in the UI whenever a user goes to provision a v1
token (both via the admin token form and the user profile token form).
Update documentation to note that v1 tokens are deprecated and will be
removed in NetBox v5.0.
Removes the deprecated querystring template tag from utilities/templatetags/
helpers.py and updates all 30 call sites across templates to use Django's
built-in querystring tag (available since Django 5.1). The request argument
is dropped since the built-in tag reads from the template context automatically.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PostgreSQL 14 reaches end-of-life in November 2026 and Django 6.1 will
require PostgreSQL 15+. Updates all documentation references from 14 to
15, and removes the "needed on PostgreSQL 15 and later" conditional
comment from the database creation instructions (since 15 is now the
minimum).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Drops the deprecated registry['models'] key, the __getitem__ deprecation
warning, and the population code in register_model(). Registered models
should be retrieved via ObjectType.objects.public() instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Drops the LEGACY_ACTIONS constant and ActionsMixin._convert_legacy_actions()
method. Action views must now define the actions attribute as a list of
ObjectAction subclasses rather than as a legacy permission dict.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes SENTRY_DSN, SENTRY_SAMPLE_RATE, SENTRY_SEND_DEFAULT_PII, and
SENTRY_TRACES_SAMPLE_RATE. These were superseded by SENTRY_CONFIG in
v4.4.2. Documentation updated to use SENTRY_CONFIG exclusively.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes the deprecated _DEFAULT_ACTION_PERMISSIONS dict and its
__getattr__ compatibility shim from netbox/constants.py. Action
permissions should be defined via ObjectAction subclasses.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The command was deprecated in v4.6.0; all housekeeping tasks are now
handled automatically by NetBox's built-in job scheduler.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes the deprecated `expand_ipaddress_pattern()` alias and the associated
`__getattr__` compatibility hook that redirected callers to `expand_ipnetwork_pattern()`.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes the deprecated OptionalLimitOffsetPagination alias (renamed to
NetBoxPagination in a prior release) per the v4.7.0 removal schedule.
Closes#22052
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes the deprecated ExpandableIPAddressField alias (renamed to
ExpandableIPNetworkField in a prior release) per the v4.7.0 removal schedule.
Closes#22053
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Configure coverage.py for multiprocessing so Django's parallel test
workers are included in the coverage data.
Move coverage source and report settings into pyproject.toml,
and combine per-process coverage data before generating the report.
Fixes#22118
Add explicit CI job names showing the Python and Node versions, with the
coverage job clearly marked in the GitHub Actions UI.
Run coverage only for the designated coverage matrix entry to avoid
redundant coverage collection and reporting across the full test matrix.
Also add the YAML document marker and clean up trailing whitespace.
Move Ruff configuration from ruff.toml into pyproject.toml and remove
obsolete Black, isort, and Pylint sections.
Consolidates all Python tooling config in a single file following
modern Python packaging standards.
Fixes#22099
Use DRF's ChoiceField for `cable_end` to preserve the existing raw
"A"/"B" API output while documenting the allowed values and nullability
in the generated schema.
Fixes#22084
* #22034 fix rack group migation from very old netbox installation
* #22034 fix rack group migation from very old netbox installation
* #22034 fix rack group migation from very old netbox installation
* fix after loading old database
* simplify
* fix index name