Requires NetBox >= 4.6.0. NetBox 4.5.x is not supported by this release.
Breaking Changes
-
Minimum NetBox raised from 4.5.4 to 4.6.0. Migration
0006depends on
users.0016_default_ordering_indexes, which first ships in NetBox 4.6.0. On 4.5.x,migrate
aborts withNodeNotFoundErrorbefore applying anything. -
The seven inventory models now inherit
PrimaryModelinstead ofNetBoxModel.description
narrows from 255 to 200 characters. No description is ever shortened for you. Migration
0007checks every row first and, if any exceeds 200 characters, rolls back and lists the
offending model, primary key and length so you can decide what to keep — move the overflow into
comments, or trim it. Re-runmigrateafterwards. To see the same list before upgrading:Asset.objects.annotate(l=Length('description')).filter(l__gt=200).values_list('pk', 'description')Repeat for
AssetService,Contract,ContractorandInvoice.
Added
-
Contacts on plugin objects. Asset, Asset Service, Contract, Contractor, External Inventory,
Invoice and RMA now support NetBox contacts. Each gains a Contacts tab on its detail page
wheretenancy.Contactrecords can be assigned with a role and priority, pluscontact,
contact_roleandcontact_groupfilters in the UI and REST API, an optionalContactstable
column, andcontactsin GraphQL as both an output field and a filter. Contacts are stored as
ContactAssignmentrows, so this adds no database columns. Contacts are intentionally not
exposed on the plugin's REST serializers, matching NetBox core — read and write them through
/api/tenancy/contact-assignments/.Assignment roles are not created by the plugin. To record the ABRA responsible person, create a
Owner contact role under Organization → Contact Roles. -
Ownership on plugin objects. The same seven models gain NetBox's
ownerfield
(users.Owner— a named set of NetBox users and groups, distinct from tenancy). Available on the
edit form, in bulk edit (nullable), in CSV import by Owner name, as optionalOwnerand
Owner Grouptable columns, asowner/owner_id/owner_group/owner_group_idfilters, in the
REST API, and in GraphQL as both an output field and a filter. API list endpoints
select_relatedthe owner to avoid an extra query per row.Migration
0006adds a nullableownerforeign key to each of the seven tables. -
descriptionandcommentson External Inventory and RMA. Both models previously lacked
these columns while their forms offered a comments box, so anything typed there was silently
discarded on save. Migration0007adds the columns and the fields now persist. -
GraphQL filtering by owner and contacts. NetBox 4.6 exposes
owneras an output field but
ships no owner filter mixin, so the plugin providesinventory_monitor.graphql.filter_mixins .OwnerFilterMixin. Owner-group filtering works by nesting:owner: { group: { name: ... } }. -
Contacts prefetching on list views.
BaseTable._set_prefetchesstops at the GenericRelation,
so enabling the Contacts column previously cost one query per contact assignment. -
inventory_monitor/tests/test_contacts.pypinning the feature registration, the Contacts URL
wiring (which fails silently when broken), the contact/owner filters, and that each edit form
renders exactly one owner widget. -
Note for the ABRA importer.
ExternalInventory.person_idstores ABRA'spersonalnumber, not
ABRA'sperson_id. Theabra_contact_idcustom field ontenancy.Contactis named after the
latter, so joining the two matches zero rows.
Fixed
-
Duplicate owner field on edit forms.
templates/htmx/form.htmland
templates/generic/bulk_edit.htmlrenderowner/owner_groupunconditionally, so listing them
in aFieldSetemitted the widget twice. On submit the browser sent both values and the second
overwrote the user's choice. Affected six of the seven edit forms plus three bulk-edit forms. -
docs/graphql-filters.mddocumented lookup names that do not exist.icontains,
startswith,endswithandinare reallyi_contains,starts_with,ends_withand
in_list, so every string-filter example in that document failed schema validation. The document
now also covers the owner and contact filters, theAND/OR/NOTcombinators, and which models
support contacts and ownership. Every example in it is executed against the live schema.
Changed
- Filtersets, forms, tables and serializers now inherit NetBox's
PrimaryModel*base classes
instead of hand-assembled owner mixins, which also fixes the mixin MRO to match core's ordering. StrFilterLookup[str]replaced with the bareStrFilterLookupthroughout the GraphQL filters;
strawberry-django 0.86.4 defines it as non-generic and warns that the type argument is ignored.