Skip to content

Releases: netboxlabs/netbox-custom-objects

v0.6.0 - 2026-07-02

Choose a tag to compare

@bctiemann bctiemann released this 02 Jul 23:30
c72d012

New Features

NetBox Branching Support

Custom Object Types and their instances now participate fully in NetBox branching workflows. COT schema changes (adding/removing fields, modifying field definitions) and instance creates/updates/deletes are all branch-aware. A version check ensures the minimum required NetBox and netbox-branching versions are present before enabling branching features.

  • #404 - Full branching support for Custom Object Types and instances
  • #569 - Add version check to gate branching features on required NetBox / netbox-branching versions

GraphQL Support

Custom Object Types and their instances are now queryable and mutable via the NetBox GraphQL API. Queries, mutations, and filtering are supported for all field types.

  • #30 - GraphQL support for Custom Objects

Enhancements

  • #98 - Config context support for Custom Objects
  • #254 - Quick Add support for object/multiobject fields
  • #286 - Contacts support for Custom Objects
  • #376 - Ownership field for Custom Object instances
  • #532 - Integer fields now use 64-bit BigIntegerField to support values exceeding the 32-bit range
  • #551 - Add location field type for latitude/longitude coordinate pairs

Bug Fixes

  • #572 - Crash on startup when netbox-branching is installed but not listed in PLUGINS

v0.5.3 - 2026-07-02

Choose a tag to compare

@bctiemann bctiemann released this 02 Jul 23:29
8eb7f9f

Bug Fixes

  • #558 - CustomObject.__str__ rendered "<type> None" after deletion when the type had no primary field
  • #561 - Related Objects link used ?<field>_id= but the filterset only registered ?<field>=; both variants are now supported
  • #567 - Custom object type field changed to undefined in the Add Field page
  • #581 - Skip inherited anonymous export test for CustomObjectTypeField views
  • #587 - Migration 0011_non_deferrable_fk_constraints failed on multi-table-inheritance COTs due to incorrect FK target column
  • #588 - AttributeError: 'CustomFieldChoiceSet' object has no attribute 'get_choice_color' on NetBox < 4.6
  • #592 - Fix Custom Objects API tests for stricter nested related object permissions

v0.5.2 - 2026-06-08

Choose a tag to compare

@bctiemann bctiemann released this 08 Jun 18:12
3e5abf1

New Features

Polymorphic Reverse Descriptors

Polymorphic Object and MultiObject fields now support a related_name that exposes a working reverse accessor on the target model instance (e.g. site.co_instances.all()). The form bug that hid the related_name field when the Polymorphic checkbox was checked has also been fixed.

  • #385 / #522 - Polymorphic Object and MultiObject fields: related_name now wires a working reverse accessor on target model classes; form fix for the field being hidden when Polymorphic is checked

Enhancements

  • #559 - Add slug filter to CustomObjectTypeFilterSet so ?slug= API queries work correctly

Bug Fixes

  • #353 - AttributeError in __str__ when the primary field was missing from the generated model
  • #369 - Selection fields displayed the raw stored key instead of the human-readable label
  • #370 - Lazy serializer registration via module __getattr__ fixed a SerializerNotFound regression; skip_object_fields guard prevents incomplete serializers from being cached
  • #371 - Tags submitted via POST or PATCH were accepted and echoed in the response but never persisted to the database
  • #384 - AttributeError and false-positive cycle detection caused by stale FK references in cross-COT fields after model regeneration
  • #406 - Bulk import for Object/MultiObject fields targeting models without a name field (e.g. ModuleType) failed with "invalid accessor field name"
  • #428 - Startup warnings from NetBox Branching and Django were not suppressed on Python 3.13 due to message-pattern filter limitations; switched to module-origin filters
  • #470 - ValueError: must be a "TableNModel" instance when saving an object with cross-COT FK fields; caused by stale model class references after model regeneration
  • #491 - Cycle detection in object-field validation failed to traverse polymorphic field edges, allowing circular references that crashed model generation
  • #523 - Deleting a Custom Object Type that had NetBox custom fields attached raised an error; NetBox CustomField references are now removed before the ObjectType is dropped
  • #529 - Selection and multi-selection fields backed by a CustomFieldChoiceSet with colors rendered as plain text; colored badges are now rendered correctly in both the list table and the detail view
  • #535 - Deleting a MultiObject field left its through-model registered in Django's app registry, causing cascade-delete errors on subsequent operations
  • #540 - Clarified Django bootstrap for portable schema export scripts
  • #543 - Tag filter links in the custom object list view returned 404
  • #550 - REST API rejected null for optional Object and MultiObject fields ("This field may not be null.")

v0.5.1 - 2026-05-19

Choose a tag to compare

@bctiemann bctiemann released this 19 May 20:21
b8fe9c0

Bug Fixes

  • #380 - Bulk edit "Select all N objects matching query" only selected the current page
  • #396 - Add permission was not sufficient to access the add URL; change permission was incorrectly required
  • #408 - Cross-COT FK fields missing after server restart
  • #443 - API updates failed for some objects due to non-dict data in generated serializer validate()
  • #477 - Deleting a custom object via the UI raised a ValueError due to through-table entries being included in the delete confirmation queryset
  • #483 - Deletion of objects with M2M relations failed due to stale path_infos on through-model FKs after COT model regeneration
  • #500 - Viewing the changelog for a custom object raised unexpected keyword argument 'user'
  • #503 - FilterSet ValueError caused by ModelChoiceFilter not handling polymorphic objects; replaced with NonPolymorphicObjectFilter
  • #507 - Migration 0011 failed with DuplicateObject on partial re-run and raised errors for long table names
  • #508 - ValueError: Must be 'TableNModel' instance in CustomObjectLink.left_page() due to no_cache=True breaking dynamic model identity
  • #511 - Raised minimum compatible NetBox version to 4.5.2
  • #517 - Mixed-case field names created quoted PostgreSQL identifiers that broke schema cloning; migration 0014 renames them to lowercase
  • #519 - Migration 0011 raised constraint already exists when table_schema was not filtered to the current schema

v0.5.0 - 2026-05-08

Choose a tag to compare

@bctiemann bctiemann released this 08 May 19:09
9492e7f

New Features

Polymorphic Object Fields

Object and multiobject fields can now reference objects of multiple content types via a generic foreign key. Enabled per-field with the is_polymorphic flag; allowed types are configured via the related_object_types M2M relation.

  • #31 - Allow GenericForeignKey Custom Object Type Fields

Portable Schema System

Custom Object Type definitions can now be exported, compared, and applied as portable JSON schema documents, enabling version-controlled schema management and automated COT lifecycle operations.

  • #386 - Define a schema format for portable Custom Object Type definitions
  • #387 - Custom Object Type state comparator
  • #388 - Custom Object Type schema exporter
  • #389 - Custom Object Type schema executor (upgrade tool)
  • #390 - Schema validation and apply API endpoints

Enhancements

  • #49 - Support NetBox CUSTOM_VALIDATORS setting keyed by COT slug (e.g. netbox_custom_objects.my-slug)
  • #224 - Accept app_label/model in API when creating object-type fields (removes requirement for related_object_type ID)
  • #270 - Add context field on Custom Object Type Fields to support secondary contextual info in dropdown selects
  • #296 / #366 - Filterset and filter-form support for all custom field types (object, multiobject, boolean, select)
  • #385 - Add related_name field to Custom Object Type Fields for configurable reverse accessor names
  • #391 - Automatically heal mixin column drift on post_migrate to keep COT schemas consistent with base class changes
  • #392 - Validate Custom Object Type version field as a PEP 440 semantic version string
  • #397 - Add branch limitation warnings to all write-operation views

Bug Fixes

  • #488 - Make custom-object FK constraints non-DEFERRABLE to prevent potential deadlocks

v0.4.10 - 2026-04-13

Choose a tag to compare

@bctiemann bctiemann released this 13 Apr 17:46
ff8adf1

Bug Fixes

  • #456 - Additional guards against a partially-migrated schema crashing during manage.py migrate

v0.4.9 - 2026-04-08

Choose a tag to compare

@bctiemann bctiemann released this 08 Apr 16:44
248cb2b

Bug Fixes

  • #456 - Error executing migration due to missing group_name column when upgrading from v0.4.6

v0.4.8 - 2026-04-07

Choose a tag to compare

@bctiemann bctiemann released this 07 Apr 17:58
d95f86d

Note: See also v0.4.7 for recent bug fixes and enhancements, as this release is a fast-follow.

Bug Fixes

  • #441 - ObjectSelectorView does not support targeting custom objects from core custom fields

v0.4.7 - 2026-04-07

Choose a tag to compare

@bctiemann bctiemann released this 07 Apr 15:52
84346c7

Enhancements

  • #25 - Linked custom objects should show up in the API response for related objects
  • #193 - Grouping custom object types in nav menu
  • #292 - Move COTF to their own standard ViewTab in the COT detail view
  • #308 - Limit rows qty in "Custom Objects linking to this object" panels

Bug Fixes

  • #382 - Primary name field breaks related custom objects and NetBox objects
  • #383 - Related objects and count on NetBox Objects are rendered twice
  • #394 - Reindex CachedValues when COT fields are changed
  • #407 - Custom object types visible in menu without permissions
  • #409 - Required Fields also required when bulk editing
  • #417 - Filtering objects by multiple-object field does not work
  • #423 - Can't use custom object as field type in POST /api/plugins/custom-objects/custom-object-type-fields/
  • #429 - Deleting Custom Object and Custom Object Type Together Causes Missing Relation Error
  • #440 - Typeahead search returns no results for non-text primary fields

v0.4.6 - 2026-01-28

Choose a tag to compare

@bctiemann bctiemann released this 28 Jan 16:46
2981bb4

Bug Fixes

  • #348 - Saving a custom object type field breaks object-field relationships
  • #372 - Double queryset evaluation in custom object list view