mirror of
https://github.com/netbox-community/netbox.git
synced 2025-12-12 11:29:36 -06:00
Merge 27ffc3df6a into 3483d979d4
This commit is contained in:
commit
e40e8b2b43
@ -38,7 +38,7 @@ class CircuitTypeSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitType
|
model = CircuitType
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'tags',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
|
||||||
'custom_fields', 'created', 'last_updated', 'circuit_count',
|
'custom_fields', 'created', 'last_updated', 'circuit_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'circuit_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'circuit_count')
|
||||||
@ -71,7 +71,7 @@ class CircuitGroupSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'tenant', 'owner', 'tags',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'tenant', 'owner', 'comments', 'tags',
|
||||||
'custom_fields', 'created', 'last_updated', 'circuit_count'
|
'custom_fields', 'created', 'last_updated', 'circuit_count'
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name')
|
brief_fields = ('id', 'url', 'display', 'name')
|
||||||
@ -161,7 +161,7 @@ class VirtualCircuitTypeSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = VirtualCircuitType
|
model = VirtualCircuitType
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'tags',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
|
||||||
'custom_fields', 'created', 'last_updated', 'virtual_circuit_count',
|
'custom_fields', 'created', 'last_updated', 'virtual_circuit_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'virtual_circuit_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'virtual_circuit_count')
|
||||||
|
|||||||
@ -99,7 +99,7 @@ class CircuitTypeBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('color', 'description'),
|
FieldSet('color', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('color', 'description')
|
nullable_fields = ('color', 'description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class CircuitBulkEditForm(PrimaryModelBulkEditForm):
|
class CircuitBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
@ -241,7 +241,7 @@ class CircuitGroupBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
|
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
nullable_fields = (
|
nullable_fields = (
|
||||||
'description', 'tenant',
|
'description', 'tenant', 'comments',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -274,7 +274,7 @@ class VirtualCircuitTypeBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('color', 'description'),
|
FieldSet('color', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('color', 'description')
|
nullable_fields = ('color', 'description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class VirtualCircuitBulkEditForm(PrimaryModelBulkEditForm):
|
class VirtualCircuitBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
|
|||||||
@ -73,7 +73,7 @@ class CircuitTypeImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitType
|
model = CircuitType
|
||||||
fields = ('name', 'slug', 'color', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'color', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class CircuitImportForm(PrimaryModelImportForm):
|
class CircuitImportForm(PrimaryModelImportForm):
|
||||||
@ -176,7 +176,7 @@ class CircuitGroupImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
fields = ('name', 'slug', 'description', 'tenant', 'owner', 'tags')
|
fields = ('name', 'slug', 'description', 'tenant', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class CircuitGroupAssignmentImportForm(NetBoxModelImportForm):
|
class CircuitGroupAssignmentImportForm(NetBoxModelImportForm):
|
||||||
@ -199,7 +199,7 @@ class VirtualCircuitTypeImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VirtualCircuitType
|
model = VirtualCircuitType
|
||||||
fields = ('name', 'slug', 'color', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'color', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class VirtualCircuitImportForm(PrimaryModelImportForm):
|
class VirtualCircuitImportForm(PrimaryModelImportForm):
|
||||||
|
|||||||
@ -97,7 +97,7 @@ class CircuitTypeForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitType
|
model = CircuitType
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'color', 'description', 'tags',
|
'name', 'slug', 'color', 'description', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -236,7 +236,7 @@ class CircuitGroupForm(TenancyForm, OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'description', 'tenant_group', 'tenant', 'owner', 'tags',
|
'name', 'slug', 'description', 'tenant_group', 'tenant', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -307,7 +307,7 @@ class VirtualCircuitTypeForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = VirtualCircuitType
|
model = VirtualCircuitType
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'color', 'description', 'owner', 'tags',
|
'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,28 @@
|
|||||||
|
# Generated by Django 5.2.8 on 2025-12-08 17:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('circuits', '0054_cable_position'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='circuitgroup',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='circuittype',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='virtualcircuittype',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -20,6 +20,7 @@ class CircuitGroupIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
@ -44,6 +45,7 @@ class CircuitTypeIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
@ -109,5 +111,6 @@ class VirtualCircuitTypeIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|||||||
@ -40,8 +40,8 @@ class CircuitTypeTable(OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = CircuitType
|
model = CircuitType
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated',
|
'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'comments', 'tags', 'created',
|
||||||
'actions',
|
'last_updated', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'circuit_count', 'color', 'description')
|
default_columns = ('pk', 'name', 'circuit_count', 'color', 'description')
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ class CircuitGroupTable(OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags',
|
'pk', 'name', 'description', 'circuit_group_assignment_count', 'comments', 'tags',
|
||||||
'created', 'last_updated', 'actions',
|
'created', 'last_updated', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count')
|
default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count')
|
||||||
|
|||||||
@ -17,7 +17,7 @@ class ManufacturerSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Manufacturer
|
model = Manufacturer
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'tags', 'custom_fields',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
'created', 'last_updated', 'devicetype_count', 'inventoryitem_count', 'platform_count',
|
'custom_fields', 'created', 'last_updated', 'devicetype_count', 'inventoryitem_count', 'platform_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'devicetype_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'devicetype_count')
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class RackRoleSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = RackRole
|
model = RackRole
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'tags',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
|
||||||
'custom_fields', 'created', 'last_updated', 'rack_count',
|
'custom_fields', 'created', 'last_updated', 'rack_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'rack_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'rack_count')
|
||||||
|
|||||||
@ -38,7 +38,7 @@ class InventoryItemRoleSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = InventoryItemRole
|
model = InventoryItemRole
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'tags',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
|
||||||
'custom_fields', 'created', 'last_updated', 'inventoryitem_count',
|
'custom_fields', 'created', 'last_updated', 'inventoryitem_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'inventoryitem_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'inventoryitem_count')
|
||||||
|
|||||||
@ -208,7 +208,7 @@ class RackRoleBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('color', 'description'),
|
FieldSet('color', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('color', 'description')
|
nullable_fields = ('color', 'description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class RackTypeBulkEditForm(PrimaryModelBulkEditForm):
|
class RackTypeBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
@ -474,7 +474,7 @@ class ManufacturerBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('description'),
|
FieldSet('description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description',)
|
nullable_fields = ('description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class DeviceTypeBulkEditForm(PrimaryModelBulkEditForm):
|
class DeviceTypeBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
@ -1719,7 +1719,7 @@ class InventoryItemRoleBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('color', 'description'),
|
FieldSet('color', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('color', 'description')
|
nullable_fields = ('color', 'description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class VirtualDeviceContextBulkEditForm(PrimaryModelBulkEditForm):
|
class VirtualDeviceContextBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
|
|||||||
@ -183,7 +183,7 @@ class RackRoleImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RackRole
|
model = RackRole
|
||||||
fields = ('name', 'slug', 'color', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'color', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class RackTypeImportForm(PrimaryModelImportForm):
|
class RackTypeImportForm(PrimaryModelImportForm):
|
||||||
@ -400,7 +400,7 @@ class ManufacturerImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Manufacturer
|
model = Manufacturer
|
||||||
fields = ('name', 'slug', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class DeviceTypeImportForm(PrimaryModelImportForm):
|
class DeviceTypeImportForm(PrimaryModelImportForm):
|
||||||
@ -1311,7 +1311,7 @@ class InventoryItemRoleImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = InventoryItemRole
|
model = InventoryItemRole
|
||||||
fields = ('name', 'slug', 'color', 'description')
|
fields = ('name', 'slug', 'color', 'description', 'owner', 'comments')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
@ -201,7 +201,7 @@ class RackRoleForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = RackRole
|
model = RackRole
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'color', 'description', 'owner', 'tags',
|
'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -344,7 +344,7 @@ class ManufacturerForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Manufacturer
|
model = Manufacturer
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'description', 'owner', 'tags',
|
'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -1815,7 +1815,7 @@ class InventoryItemRoleForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = InventoryItemRole
|
model = InventoryItemRole
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'color', 'description', 'owner', 'tags',
|
'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,28 @@
|
|||||||
|
# Generated by Django 5.2.8 on 2025-12-08 17:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('dcim', '0221_cable_position'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='inventoryitemrole',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='manufacturer',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='rackrole',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -137,6 +137,18 @@ class InventoryItemIndex(SearchIndex):
|
|||||||
display_attrs = ('device', 'manufacturer', 'parent', 'part_id', 'serial', 'asset_tag', 'description')
|
display_attrs = ('device', 'manufacturer', 'parent', 'part_id', 'serial', 'asset_tag', 'description')
|
||||||
|
|
||||||
|
|
||||||
|
@register_search
|
||||||
|
class InventoryItemRoleIndex(SearchIndex):
|
||||||
|
model = models.InventoryItemRole
|
||||||
|
fields = (
|
||||||
|
('name', 100),
|
||||||
|
('slug', 110),
|
||||||
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
|
)
|
||||||
|
display_attrs = ('description',)
|
||||||
|
|
||||||
|
|
||||||
@register_search
|
@register_search
|
||||||
class LocationIndex(SearchIndex):
|
class LocationIndex(SearchIndex):
|
||||||
model = models.Location
|
model = models.Location
|
||||||
@ -157,6 +169,7 @@ class ManufacturerIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
@ -308,6 +321,7 @@ class RackRoleIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
|
|||||||
@ -1053,7 +1053,7 @@ class InventoryItemRoleTable(OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = models.InventoryItemRole
|
model = models.InventoryItemRole
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'inventoryitem_count', 'color', 'description', 'slug', 'tags', 'actions',
|
'pk', 'id', 'name', 'inventoryitem_count', 'color', 'description', 'slug', 'comments', 'tags', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'inventoryitem_count', 'color', 'description')
|
default_columns = ('pk', 'name', 'inventoryitem_count', 'color', 'description')
|
||||||
|
|
||||||
|
|||||||
@ -64,7 +64,8 @@ class ManufacturerTable(ContactsColumnMixin, OrganizationalModelTable):
|
|||||||
model = models.Manufacturer
|
model = models.Manufacturer
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
|
'pk', 'id', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
|
||||||
'platform_count', 'description', 'slug', 'tags', 'contacts', 'actions', 'created', 'last_updated',
|
'platform_count', 'description', 'slug', 'comments', 'tags', 'contacts', 'actions', 'created',
|
||||||
|
'last_updated',
|
||||||
)
|
)
|
||||||
default_columns = (
|
default_columns = (
|
||||||
'pk', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
|
'pk', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
|
||||||
|
|||||||
@ -35,7 +35,7 @@ class RackRoleTable(OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = RackRole
|
model = RackRole
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'rack_count', 'color', 'description', 'slug', 'tags', 'actions', 'created',
|
'pk', 'id', 'name', 'rack_count', 'color', 'description', 'slug', 'comments', 'tags', 'actions', 'created',
|
||||||
'last_updated',
|
'last_updated',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'rack_count', 'color', 'description')
|
default_columns = ('pk', 'name', 'rack_count', 'color', 'description')
|
||||||
|
|||||||
@ -21,8 +21,8 @@ class RIRSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = RIR
|
model = RIR
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'is_private', 'description', 'owner', 'tags',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'is_private', 'description', 'owner', 'comments',
|
||||||
'custom_fields', 'created', 'last_updated', 'aggregate_count',
|
'tags', 'custom_fields', 'created', 'last_updated', 'aggregate_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'aggregate_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'aggregate_count')
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ class ASNRangeSerializer(OrganizationalModelSerializer):
|
|||||||
model = ASNRange
|
model = ASNRange
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'rir', 'start', 'end', 'tenant', 'description',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'rir', 'start', 'end', 'tenant', 'description',
|
||||||
'owner', 'tags', 'custom_fields', 'created', 'last_updated', 'asn_count',
|
'owner', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'asn_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ class RoleSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'weight', 'description', 'owner', 'tags',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'weight', 'description', 'owner', 'comments', 'tags',
|
||||||
'custom_fields', 'created', 'last_updated', 'prefix_count', 'vlan_count',
|
'custom_fields', 'created', 'last_updated', 'prefix_count', 'vlan_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'prefix_count', 'vlan_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'prefix_count', 'vlan_count')
|
||||||
|
|||||||
@ -45,8 +45,8 @@ class VLANGroupSerializer(OrganizationalModelSerializer):
|
|||||||
model = VLANGroup
|
model = VLANGroup
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'scope_type', 'scope_id', 'scope', 'vid_ranges',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'scope_type', 'scope_id', 'scope', 'vid_ranges',
|
||||||
'tenant', 'description', 'owner', 'tags', 'custom_fields', 'created', 'last_updated', 'vlan_count',
|
'tenant', 'description', 'owner', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
|
||||||
'utilization',
|
'vlan_count', 'utilization',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'vlan_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'vlan_count')
|
||||||
validators = []
|
validators = []
|
||||||
|
|||||||
@ -85,7 +85,7 @@ class RIRBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('is_private', 'description'),
|
FieldSet('is_private', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('is_private', 'description')
|
nullable_fields = ('is_private', 'description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class ASNRangeBulkEditForm(OrganizationalModelBulkEditForm):
|
class ASNRangeBulkEditForm(OrganizationalModelBulkEditForm):
|
||||||
@ -104,7 +104,7 @@ class ASNRangeBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('rir', 'tenant', 'description'),
|
FieldSet('rir', 'tenant', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description',)
|
nullable_fields = ('description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class ASNBulkEditForm(PrimaryModelBulkEditForm):
|
class ASNBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
@ -164,7 +164,7 @@ class RoleBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('weight', 'description'),
|
FieldSet('weight', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description',)
|
nullable_fields = ('description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class PrefixBulkEditForm(ScopedBulkEditForm, PrimaryModelBulkEditForm):
|
class PrefixBulkEditForm(ScopedBulkEditForm, PrimaryModelBulkEditForm):
|
||||||
@ -379,7 +379,7 @@ class VLANGroupBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
FieldSet('scope_type', 'scope', name=_('Scope')),
|
FieldSet('scope_type', 'scope', name=_('Scope')),
|
||||||
FieldSet('tenant', name=_('Tenancy')),
|
FieldSet('tenant', name=_('Tenancy')),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description', 'scope')
|
nullable_fields = ('description', 'scope', 'comments')
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|||||||
@ -84,7 +84,7 @@ class RIRImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RIR
|
model = RIR
|
||||||
fields = ('name', 'slug', 'is_private', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'is_private', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class AggregateImportForm(PrimaryModelImportForm):
|
class AggregateImportForm(PrimaryModelImportForm):
|
||||||
@ -124,7 +124,7 @@ class ASNRangeImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ASNRange
|
model = ASNRange
|
||||||
fields = ('name', 'slug', 'rir', 'start', 'end', 'tenant', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'rir', 'start', 'end', 'tenant', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class ASNImportForm(PrimaryModelImportForm):
|
class ASNImportForm(PrimaryModelImportForm):
|
||||||
@ -151,7 +151,7 @@ class RoleImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
fields = ('name', 'slug', 'weight', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'weight', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class PrefixImportForm(ScopedImportForm, PrimaryModelImportForm):
|
class PrefixImportForm(ScopedImportForm, PrimaryModelImportForm):
|
||||||
@ -476,7 +476,9 @@ class VLANGroupImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VLANGroup
|
model = VLANGroup
|
||||||
fields = ('name', 'slug', 'scope_type', 'scope_id', 'vid_ranges', 'tenant', 'description', 'owner', 'tags')
|
fields = (
|
||||||
|
'name', 'slug', 'scope_type', 'scope_id', 'vid_ranges', 'tenant', 'description', 'owner', 'comments', 'tags'
|
||||||
|
)
|
||||||
labels = {
|
labels = {
|
||||||
'scope_id': 'Scope ID',
|
'scope_id': 'Scope ID',
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,7 +99,7 @@ class RIRForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = RIR
|
model = RIR
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'is_private', 'description', 'owner', 'tags',
|
'name', 'slug', 'is_private', 'description', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ class ASNRangeForm(TenancyForm, OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ASNRange
|
model = ASNRange
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'rir', 'start', 'end', 'tenant_group', 'tenant', 'owner', 'description', 'tags'
|
'name', 'slug', 'rir', 'start', 'end', 'tenant_group', 'tenant', 'owner', 'description', 'comments', 'tags'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ class RoleForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'weight', 'description', 'owner', 'tags',
|
'name', 'slug', 'weight', 'description', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -614,7 +614,8 @@ class VLANGroupForm(TenancyForm, OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = VLANGroup
|
model = VLANGroup
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'description', 'vid_ranges', 'scope_type', 'tenant_group', 'tenant', 'owner', 'tags',
|
'name', 'slug', 'description', 'vid_ranges', 'scope_type', 'tenant_group', 'tenant', 'owner', 'comments',
|
||||||
|
'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
# Generated by Django 5.2.8 on 2025-12-08 17:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('ipam', '0084_owner'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='asnrange',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='rir',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='role',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='vlangroup',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -31,6 +31,7 @@ class ASNRangeIndex(SearchIndex):
|
|||||||
fields = (
|
fields = (
|
||||||
('name', 100),
|
('name', 100),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('rir', 'tenant', 'description')
|
display_attrs = ('rir', 'tenant', 'description')
|
||||||
|
|
||||||
@ -89,6 +90,7 @@ class RIRIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
@ -100,6 +102,7 @@ class RoleIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
@ -156,6 +159,7 @@ class VLANGroupIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('scope_type', 'description')
|
display_attrs = ('scope_type', 'description')
|
||||||
|
|
||||||
|
|||||||
@ -30,8 +30,8 @@ class ASNRangeTable(TenancyColumnsMixin, OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = ASNRange
|
model = ASNRange
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'name', 'slug', 'rir', 'start', 'end', 'asn_count', 'tenant', 'tenant_group', 'description', 'tags',
|
'pk', 'name', 'slug', 'rir', 'start', 'end', 'asn_count', 'tenant', 'tenant_group', 'description',
|
||||||
'created', 'last_updated', 'actions',
|
'comments', 'tags', 'created', 'last_updated', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'rir', 'start', 'end', 'tenant', 'asn_count', 'description')
|
default_columns = ('pk', 'name', 'rir', 'start', 'end', 'tenant', 'asn_count', 'description')
|
||||||
|
|
||||||
|
|||||||
@ -48,7 +48,7 @@ class RIRTable(OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = RIR
|
model = RIR
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'slug', 'is_private', 'aggregate_count', 'description', 'tags', 'created',
|
'pk', 'id', 'name', 'slug', 'is_private', 'aggregate_count', 'description', 'comments', 'tags', 'created',
|
||||||
'last_updated', 'actions',
|
'last_updated', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'is_private', 'aggregate_count', 'description')
|
default_columns = ('pk', 'name', 'is_private', 'aggregate_count', 'description')
|
||||||
@ -126,8 +126,8 @@ class RoleTable(OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = Role
|
model = Role
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'slug', 'prefix_count', 'iprange_count', 'vlan_count', 'description', 'weight', 'tags',
|
'pk', 'id', 'name', 'slug', 'prefix_count', 'iprange_count', 'vlan_count', 'description', 'weight',
|
||||||
'created', 'last_updated', 'actions',
|
'comments', 'tags', 'created', 'last_updated', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'prefix_count', 'iprange_count', 'vlan_count', 'description')
|
default_columns = ('pk', 'name', 'prefix_count', 'iprange_count', 'vlan_count', 'description')
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ class VLANGroupTable(TenancyColumnsMixin, OrganizationalModelTable):
|
|||||||
model = VLANGroup
|
model = VLANGroup
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'scope_type', 'scope', 'vid_ranges_list', 'vlan_count', 'slug', 'description',
|
'pk', 'id', 'name', 'scope_type', 'scope', 'vid_ranges_list', 'vlan_count', 'slug', 'description',
|
||||||
'tenant', 'tenant_group', 'tags', 'created', 'last_updated', 'actions', 'utilization',
|
'tenant', 'tenant_group', 'comments', 'tags', 'created', 'last_updated', 'actions', 'utilization',
|
||||||
)
|
)
|
||||||
default_columns = (
|
default_columns = (
|
||||||
'pk', 'name', 'scope_type', 'scope', 'vlan_count', 'utilization', 'tenant', 'description'
|
'pk', 'name', 'scope_type', 'scope', 'vlan_count', 'utilization', 'tenant', 'description'
|
||||||
|
|||||||
@ -91,6 +91,7 @@ class OrganizationalModelBulkEditForm(OwnerMixin, NetBoxModelBulkEditForm):
|
|||||||
max_length=200,
|
max_length=200,
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
comments = CommentField()
|
||||||
|
|
||||||
|
|
||||||
class NestedGroupModelBulkEditForm(OwnerMixin, NetBoxModelBulkEditForm):
|
class NestedGroupModelBulkEditForm(OwnerMixin, NetBoxModelBulkEditForm):
|
||||||
|
|||||||
@ -91,6 +91,7 @@ class OrganizationalModelForm(OwnerMixin, NetBoxModelForm):
|
|||||||
Form for models which inherit from OrganizationalModel.
|
Form for models which inherit from OrganizationalModel.
|
||||||
"""
|
"""
|
||||||
slug = SlugField()
|
slug = SlugField()
|
||||||
|
comments = CommentField()
|
||||||
|
|
||||||
|
|
||||||
class NestedGroupModelForm(OwnerMixin, NetBoxModelForm):
|
class NestedGroupModelForm(OwnerMixin, NetBoxModelForm):
|
||||||
|
|||||||
@ -58,6 +58,7 @@ class OrganizationalModelFilterMixin(
|
|||||||
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
||||||
slug: FilterLookup[str] | None = strawberry_django.filter_field()
|
slug: FilterLookup[str] | None = strawberry_django.filter_field()
|
||||||
description: FilterLookup[str] | None = strawberry_django.filter_field()
|
description: FilterLookup[str] | None = strawberry_django.filter_field()
|
||||||
|
comments: FilterLookup[str] | None = strawberry_django.filter_field()
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|||||||
@ -215,6 +215,10 @@ class OrganizationalModel(OwnerMixin, NetBoxModel):
|
|||||||
max_length=200,
|
max_length=200,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
|
comments = models.TextField(
|
||||||
|
verbose_name=_('comments'),
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|||||||
@ -285,6 +285,9 @@ class OrganizationalModelTable(NetBoxTable):
|
|||||||
linkify=True,
|
linkify=True,
|
||||||
verbose_name=_('Owner')
|
verbose_name=_('Owner')
|
||||||
)
|
)
|
||||||
|
comments = columns.MarkdownColumn(
|
||||||
|
verbose_name=_('Comments'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class NestedGroupModelTable(NetBoxTable):
|
class NestedGroupModelTable(NetBoxTable):
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -40,6 +40,7 @@
|
|||||||
{% plugin_left_page object %}
|
{% plugin_left_page object %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -44,6 +44,7 @@
|
|||||||
{% include 'inc/panels/tags.html' %}
|
{% include 'inc/panels/tags.html' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -37,6 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -37,6 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -62,6 +62,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -29,6 +29,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -39,6 +39,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -37,6 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-md-6">
|
<div class="col col-12 col-md-6">
|
||||||
{% include 'inc/panels/related_objects.html' %}
|
{% include 'inc/panels/related_objects.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -36,8 +36,8 @@ class ContactRoleSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ContactRole
|
model = ContactRole
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'tags', 'custom_fields',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
'created', 'last_updated',
|
'custom_fields', 'created', 'last_updated',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description')
|
||||||
|
|
||||||
|
|||||||
@ -72,7 +72,7 @@ class ContactRoleBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('description'),
|
FieldSet('description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description',)
|
nullable_fields = ('description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class ContactBulkEditForm(PrimaryModelBulkEditForm):
|
class ContactBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
|
|||||||
@ -74,7 +74,7 @@ class ContactRoleImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ContactRole
|
model = ContactRole
|
||||||
fields = ('name', 'slug', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class ContactImportForm(PrimaryModelImportForm):
|
class ContactImportForm(PrimaryModelImportForm):
|
||||||
|
|||||||
@ -84,7 +84,7 @@ class ContactRoleForm(OrganizationalModelForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ContactRole
|
model = ContactRole
|
||||||
fields = ('name', 'slug', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class ContactForm(PrimaryModelForm):
|
class ContactForm(PrimaryModelForm):
|
||||||
|
|||||||
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.2.8 on 2025-12-08 17:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tenancy', '0021_owner'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='contactrole',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -37,6 +37,7 @@ class ContactRoleIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@ class ContactRoleTable(OrganizationalModelTable):
|
|||||||
|
|
||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = ContactRole
|
model = ContactRole
|
||||||
fields = ('pk', 'name', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions')
|
fields = ('pk', 'name', 'description', 'comments', 'slug', 'tags', 'created', 'last_updated', 'actions')
|
||||||
default_columns = ('pk', 'name', 'description')
|
default_columns = ('pk', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -23,8 +23,8 @@ class ClusterTypeSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ClusterType
|
model = ClusterType
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'tags', 'custom_fields',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
'created', 'last_updated', 'cluster_count',
|
'custom_fields', 'created', 'last_updated', 'cluster_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'cluster_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'cluster_count')
|
||||||
|
|
||||||
@ -37,8 +37,8 @@ class ClusterGroupSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ClusterGroup
|
model = ClusterGroup
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'tags', 'custom_fields',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
'created', 'last_updated', 'cluster_count',
|
'custom_fields', 'created', 'last_updated', 'cluster_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'cluster_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'cluster_count')
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,7 @@ class ClusterTypeBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('description'),
|
FieldSet('description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description',)
|
nullable_fields = ('description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class ClusterGroupBulkEditForm(OrganizationalModelBulkEditForm):
|
class ClusterGroupBulkEditForm(OrganizationalModelBulkEditForm):
|
||||||
@ -42,7 +42,7 @@ class ClusterGroupBulkEditForm(OrganizationalModelBulkEditForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('description'),
|
FieldSet('description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description',)
|
nullable_fields = ('description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class ClusterBulkEditForm(ScopedBulkEditForm, PrimaryModelBulkEditForm):
|
class ClusterBulkEditForm(ScopedBulkEditForm, PrimaryModelBulkEditForm):
|
||||||
|
|||||||
@ -28,14 +28,14 @@ class ClusterTypeImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ClusterType
|
model = ClusterType
|
||||||
fields = ('name', 'slug', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class ClusterGroupImportForm(OrganizationalModelImportForm):
|
class ClusterGroupImportForm(OrganizationalModelImportForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ClusterGroup
|
model = ClusterGroup
|
||||||
fields = ('name', 'slug', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class ClusterImportForm(ScopedImportForm, PrimaryModelImportForm):
|
class ClusterImportForm(ScopedImportForm, PrimaryModelImportForm):
|
||||||
|
|||||||
@ -39,7 +39,7 @@ class ClusterTypeForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ClusterType
|
model = ClusterType
|
||||||
fields = (
|
fields = (
|
||||||
'name', 'slug', 'description', 'owner', 'tags',
|
'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ class ClusterGroupForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ClusterGroup
|
model = ClusterGroup
|
||||||
fields = (
|
fields = (
|
||||||
'name', 'slug', 'description', 'owner', 'tags',
|
'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 5.2.8 on 2025-12-08 17:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('virtualization', '0050_virtualmachine_start_on_boot'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='clustergroup',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='clustertype',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -20,6 +20,7 @@ class ClusterGroupIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ class ClusterTypeIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,8 @@ class ClusterTypeTable(OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = ClusterType
|
model = ClusterType
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'created', 'last_updated', 'tags', 'actions',
|
'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'comments', 'created', 'last_updated', 'tags',
|
||||||
|
'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'cluster_count', 'description')
|
default_columns = ('pk', 'name', 'cluster_count', 'description')
|
||||||
|
|
||||||
@ -51,8 +52,8 @@ class ClusterGroupTable(ContactsColumnMixin, OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = ClusterGroup
|
model = ClusterGroup
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'contacts', 'tags', 'created', 'last_updated',
|
'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'comments', 'contacts', 'tags', 'created',
|
||||||
'actions',
|
'last_updated', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'cluster_count', 'description')
|
default_columns = ('pk', 'name', 'cluster_count', 'description')
|
||||||
|
|
||||||
|
|||||||
@ -28,8 +28,8 @@ class TunnelGroupSerializer(OrganizationalModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = TunnelGroup
|
model = TunnelGroup
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'tags', 'custom_fields',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
'created', 'last_updated', 'tunnel_count',
|
'custom_fields', 'created', 'last_updated', 'tunnel_count',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'tunnel_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'tunnel_count')
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ __all__ = (
|
|||||||
|
|
||||||
class TunnelGroupBulkEditForm(OrganizationalModelBulkEditForm):
|
class TunnelGroupBulkEditForm(OrganizationalModelBulkEditForm):
|
||||||
model = TunnelGroup
|
model = TunnelGroup
|
||||||
nullable_fields = ('description',)
|
nullable_fields = ('description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class TunnelBulkEditForm(PrimaryModelBulkEditForm):
|
class TunnelBulkEditForm(PrimaryModelBulkEditForm):
|
||||||
|
|||||||
@ -28,7 +28,7 @@ class TunnelGroupImportForm(OrganizationalModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TunnelGroup
|
model = TunnelGroup
|
||||||
fields = ('name', 'slug', 'description', 'owner', 'tags')
|
fields = ('name', 'slug', 'description', 'owner', 'comments', 'tags')
|
||||||
|
|
||||||
|
|
||||||
class TunnelImportForm(PrimaryModelImportForm):
|
class TunnelImportForm(PrimaryModelImportForm):
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class TunnelGroupForm(OrganizationalModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = TunnelGroup
|
model = TunnelGroup
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'slug', 'description', 'owner', 'tags',
|
'name', 'slug', 'description', 'owner', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.2.8 on 2025-12-08 17:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('vpn', '0010_owner'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tunnelgroup',
|
||||||
|
name='comments',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -21,6 +21,7 @@ class TunnelGroupIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('description',)
|
display_attrs = ('description',)
|
||||||
|
|
||||||
|
|||||||
@ -30,8 +30,8 @@ class TunnelGroupTable(ContactsColumnMixin, OrganizationalModelTable):
|
|||||||
class Meta(OrganizationalModelTable.Meta):
|
class Meta(OrganizationalModelTable.Meta):
|
||||||
model = TunnelGroup
|
model = TunnelGroup
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'tunnel_count', 'description', 'slug', 'contacts', 'tags', 'actions', 'created',
|
'pk', 'id', 'name', 'tunnel_count', 'description', 'comments', 'slug', 'contacts', 'tags', 'actions',
|
||||||
'last_updated',
|
'created', 'last_updated',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'tunnel_count', 'description')
|
default_columns = ('pk', 'name', 'tunnel_count', 'description')
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user