Skip to content

Releases: CESNET/netbox-custom-objects-tab

v2.0.1

25 Feb 17:17

Choose a tag to compare

What's Changed

Added

  • Typed tabs (per-type) — each Custom Object Type gets its own tab with a full-featured list view: type-specific columns, filterset sidebar, bulk edit/delete, configure table, and HTMX pagination.
  • typed_models and typed_weight config settings.
  • Third-party plugin model support for both tab modes.

Changed

  • Renamed models config to combined_models; label to combined_label; weight to combined_weight.
  • Refactored views from single views.py to views/ package (__init__.py, combined.py, typed.py).
  • Templates reorganized into combined/ and typed/ subdirectories.

Fixed

  • Handle missing database during startup — register_typed_tabs() now catches OperationalError and ProgrammingError so NetBox can start even when the database is unavailable or migrations haven't run yet.
  • Bulk action return URL in typed tabs — uses query parameter ?return_url= on formaction for reliable redirect.

Full Changelog: https://github.com/CESNET/netbox-custom-objects-tab/blob/v2.0.1/CHANGELOG.md

v2.0.1b1

25 Feb 15:46

Choose a tag to compare

v2.0.1b1 Pre-release
Pre-release

What's New

Typed tabs (per-type) — each Custom Object Type gets its own tab with a full-featured list view: type-specific columns, filterset sidebar, bulk edit/delete, configure table, and HTMX pagination.

Added

  • typed_models and typed_weight config settings
  • Third-party plugin model support for both tab modes

Changed

  • Renamed config: modelscombined_models, labelcombined_label, weightcombined_weight
  • Refactored views into views/ package; templates into combined/ and typed/ subdirectories

Fixed

  • Bulk action return URL in typed tabs

See CHANGELOG.md for full details.

v1.0.1

24 Feb 19:07

Choose a tag to compare

Bug Fixes

Templates missing from installed package (#packaging)

When installing netbox-custom-objects-tab from PyPI or a pre-built wheel, the HTML
templates were not included in the package, causing a TemplateDoesNotExist error on
every tab page load. This particularly affected Docker-based NetBox deployments.

Root cause: setuptools does not include non-Python files by default. The
[tool.setuptools.package-data] directive was missing from pyproject.toml, and no
MANIFEST.in existed to cover source distributions.

Fix: Added MANIFEST.in and [tool.setuptools.package-data] in pyproject.toml
so all HTML templates under netbox_custom_objects_tab/templates/ are bundled into
both wheel and sdist artifacts.

Upgrade Notes

If you installed 1.0.0 from PyPI, upgrade with:

pip install --upgrade netbox-custom-objects-tab

No migrations, no configuration changes required.

Full Changelog: v1.0.0...v1.0.1

v1.0.0

24 Feb 18:04

Choose a tag to compare

What's New

First stable release of netbox-custom-objects-tab — a NetBox 4.5.x plugin that adds
a Custom Objects tab to standard object detail pages, showing any Custom Object
instances from the netbox_custom_objects plugin that reference the viewed object via
OBJECT or MULTIOBJECT fields.

Added

  • Custom Objects tab on NetBox object detail pages (Device, Site, Rack, and any
    configured model), showing Custom Object instances that reference the viewed object
    via OBJECT or MULTIOBJECT typed fields.
  • Pagination using NetBox's EnhancedPaginator; respects the user's personal
    per-page preference and the ?per_page=N URL parameter.
  • Text search (?q=) filtering results by Custom Object instance display name,
    Custom Object Type name, and field label.
  • Type filter dropdown (?type=<slug>) to narrow results to a single Custom Object
    Type, populated dynamically from types present in the current result set.
  • Tag filter dropdown (?tag=<slug>) to narrow results to objects with a specific
    tag. Tag data is pre-fetched in bulk — no N+1 query cost.
  • Column sorting — clicking Type, Object, or Field column headers sorts
    the table in-memory; a second click toggles direction.
  • Value column — shows the actual field value: a link for OBJECT fields, or
    comma-separated links (truncated at 3) for MULTIOBJECT fields.
  • Tags column — colored tag badges per row; when none.
  • Permission-gated action buttons — Edit (requires change) and Delete (requires
    delete) buttons per row. Users without permissions see no action buttons.
  • HTMX partial updates — pagination, sorting, search, type-dropdown, and
    tag-dropdown changes swap only the table zone in-place without a full page reload.
    URL is updated via pushState so links remain shareable and the back button works.
  • Configure Table — a "Configure Table" button lets authenticated users show, hide,
    and reorder columns (Type, Object, Value, Field, Tags). Preferences are persisted
    per-user in UserConfig. The Actions column is always visible.
  • Efficient badge counts — the tab badge on detail pages is computed with COUNT(*)
    queries only; full object rows are loaded only when the tab itself is opened.
  • Wildcard model registrationmodels config accepts app_label.* wildcards
    (e.g. dcim.*, ipam.*).
  • Third-party plugin model support — any installed Django app can be listed in models.
  • Default models: ['dcim.*', 'ipam.*', 'virtualization.*', 'tenancy.*', 'contacts.*'].
  • Tab is hidden automatically (hide_if_empty=True) when no custom objects reference the
    viewed object.
  • Configurable tab label and weight via PLUGINS_CONFIG.

Fixed

  • Edit/Delete return URL — after saving an edit or confirming a deletion, NetBox
    redirects back to the Custom Objects tab (preserving active filters) instead of the
    Custom Object list page.

Requirements

  • NetBox 4.5.0 – 4.5.99
  • netbox_custom_objects plugin installed and configured

Installation

pip install netbox-custom-objects-tab==1.0.0

See the README for
full setup instructions.