Document remaining primary/organizational/nestedgroup resources for the plugins API (except GraphQL types & filters)

This commit is contained in:
Jeremy Stretch 2025-12-04 15:29:34 -05:00
parent 6d777a20ad
commit 1715ce6cdd
5 changed files with 78 additions and 16 deletions

View File

@ -32,7 +32,7 @@ class MyFilterSet(NetBoxModelFilterSet):
fields = ('some', 'other', 'fields')
```
In addition to the base NetBoxModelFilterSet class, the following filterset classes are also available for applicable models.
In addition to the base NetBoxModelFilterSet class, the following filterset classes are also available for subclasses of standard base models.
| Model Class | FilterSet Class |
|-----------------------|--------------------------------------------------|

View File

@ -2,7 +2,7 @@
## Form Classes
NetBox provides several base form classes for use by plugins.
NetBox provides several base form classes for use by plugins. Additional form classes are also available for other standard base model classes (PrimaryModel, OrganizationalModel, and NestedGroupModel).
| Form Class | Purpose |
|----------------------------|--------------------------------------|
@ -19,7 +19,17 @@ This is the base form for creating and editing NetBox models. It extends Django'
|-------------|---------------------------------------------------------------------------------------|
| `fieldsets` | A tuple of `FieldSet` instances which control how form fields are rendered (optional) |
**Example**
#### Subclasses
The corresponding model-specific subclasses of `NetBoxModelForm` are documented below.
| Model Class | Form Class |
|---------------------|-------------------------|
| PrimaryModel | PrimaryModelForm |
| OrganizationalModel | OrganizationalModelForm |
| NestedGroupModel | NestedGroupModelForm |
#### Example
```python
from django.utils.translation import gettext_lazy as _
@ -49,9 +59,19 @@ class MyModelForm(NetBoxModelForm):
### `NetBoxModelImportForm`
This form facilitates the bulk import of new objects from CSV, JSON, or YAML data. As with model forms, you'll need to declare a `Meta` subclass specifying the associated `model` and `fields`. NetBox also provides several form fields suitable for import various types of CSV data, listed below.
This form facilitates the bulk import of new objects from CSV, JSON, or YAML data. As with model forms, you'll need to declare a `Meta` subclass specifying the associated `model` and `fields`. NetBox also provides several form fields suitable for importing various types of CSV data, listed [below](#csv-import-fields).
**Example**
#### Subclasses
The corresponding model-specific subclasses of `NetBoxModelImportForm` are documented below.
| Model Class | Form Class |
|---------------------|-------------------------------|
| PrimaryModel | PrimaryModelImportForm |
| OrganizationalModel | OrganizationalModelImportForm |
| NestedGroupModel | NestedGroupModelImportForm |
#### Example
```python
from django.utils.translation import gettext_lazy as _
@ -83,7 +103,17 @@ This form facilitates editing multiple objects in bulk. Unlike a model form, thi
| `fieldsets` | A tuple of `FieldSet` instances which control how form fields are rendered (optional) |
| `nullable_fields` | A tuple of fields which can be nullified (set to empty) using the bulk edit form (optional) |
**Example**
#### Subclasses
The corresponding model-specific subclasses of `NetBoxModelBulkEditForm` are documented below.
| Model Class | Form Class |
|---------------------|---------------------------------|
| PrimaryModel | PrimaryModelBulkEditForm |
| OrganizationalModel | OrganizationalModelBulkEditForm |
| NestedGroupModel | NestedGroupModelBulkEditForm |
#### Example
```python
from django import forms
@ -125,7 +155,17 @@ This form class is used to render a form expressly for filtering a list of objec
| `model` | The model of object being edited |
| `fieldsets` | A tuple of `FieldSet` instances which control how form fields are rendered (optional) |
**Example**
#### Subclasses
The corresponding model-specific subclasses of `NetBoxModelFilterSetForm` are documented below.
| Model Class | Form Class |
|---------------------|----------------------------------|
| PrimaryModel | PrimaryModelFilterSetForm |
| OrganizationalModel | OrganizationalModelFilterSetForm |
| NestedGroupModel | NestedGroupModelFilterSetForm |
#### Example
```python
from dcim.models import Site

View File

@ -67,23 +67,45 @@ class MyModel(ExportTemplatesMixin, TagsMixin, models.Model):
...
```
## Additional Models
### Additional Models
In addition to the base NetBoxModel class, the following additional classes are provided for convenience.
!!! info "These base classes were added to the plugins API in NetBox v4.5."
!!! info "These model classes were added to the plugins API in NetBox v4.5."
### PrimaryModel
#### PrimaryModel
PrimaryModel is the go-to class for most object types. It extends NetBoxModel with `description` and `comments` fields, and it introduces support for ownership assignment.
### OrganizationalModel
| Field | Required | Unique | Description |
|---------------|----------|--------|---------------------------------------------|
| `owner` | No | No | The object's owner |
| `description` | No | No | A human-friendly description for the object |
| `comments` | No | No | General comments |
OrganizationalModel is used by object types whose function is primarily the organization of other objects. It adds to NetBoxModel fields for `name`, `slug`, and `description`. It also supports ownership assignment.
#### OrganizationalModel
### NestedGroupModel
OrganizationalModel is used by object types whose function is primarily the organization of other objects.
NestedGroupModel is used for objects which arrange into a recursive hierarchy (like regions and locations) via its self-referential `parent` foreign key. It adds to NetBoxModel fields for `name`, `slug`, `description`, and `comments`. It also supports ownership assignment.
| Field | Required | Unique | Description |
|---------------|----------|--------|---------------------------------------------|
| `name` | Yes | Yes | The name of the object |
| `slug` | Yes | Yes | A unique URL-friendly identifier |
| `owner` | No | No | The object's owner |
| `description` | No | No | A human-friendly description for the object |
#### NestedGroupModel
NestedGroupModel is used for objects which arrange into a recursive hierarchy (like regions and locations) via its self-referential `parent` foreign key.
| Field | Required | Unique | Description |
|---------------|----------|--------|-----------------------------------------------------------------|
| `name` | Yes | Yes | The name of the object |
| `slug` | Yes | Yes | A unique URL-friendly identifier |
| `parent` | No | No | The object (of the same type) under which this object is nested |
| `owner` | No | No | The object's owner |
| `description` | No | No | A human-friendly description for the object |
| `comments` | No | No | General comments |
## Database Migrations

View File

@ -27,7 +27,7 @@ Serializers are responsible for converting Python objects to JSON data suitable
The default nested representation of an object is defined by the `brief_fields` attributes under the serializer's `Meta` class. (Older versions of NetBox required the definition of a separate nested serializer.)
In addition to the base NetBoxModelSerializer class, the following serializer classes are also available for applicable models.
In addition to the base NetBoxModelSerializer class, the following serializer classes are also available for subclasses of standard base models.
| Model Class | Serializer Class |
|-----------------------|--------------------------------------------------------|

View File

@ -36,7 +36,7 @@ class MyModelTable(NetBoxTable):
default_columns = ('pk', 'name', ...)
```
In addition to the base NetBoxTable class, the following table classes are also available for applicable models.
In addition to the base NetBoxTable class, the following table classes are also available for subclasses of standard base models.
| Model Class | Serializer Class |
|-----------------------|------------------------------------------|