mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-27 02:48:38 -06:00
Add missing mixins for changelog message support
This commit is contained in:
parent
3fba47eb08
commit
5bed9e8667
@ -9,7 +9,7 @@ from dcim.models import (
|
|||||||
InventoryItemTemplate, ModuleBayTemplate, PowerOutletTemplate, PowerPortTemplate, RearPortTemplate,
|
InventoryItemTemplate, ModuleBayTemplate, PowerOutletTemplate, PowerPortTemplate, RearPortTemplate,
|
||||||
)
|
)
|
||||||
from netbox.api.fields import ChoiceField, ContentTypeField
|
from netbox.api.fields import ChoiceField, ContentTypeField
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
from utilities.api import get_serializer_for_model
|
from utilities.api import get_serializer_for_model
|
||||||
from wireless.choices import *
|
from wireless.choices import *
|
||||||
from .devicetypes import DeviceTypeSerializer, ModuleTypeSerializer
|
from .devicetypes import DeviceTypeSerializer, ModuleTypeSerializer
|
||||||
@ -31,7 +31,11 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ConsolePortTemplateSerializer(ValidatedModelSerializer):
|
class ComponentTemplateSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ConsolePortTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False,
|
required=False,
|
||||||
@ -59,7 +63,7 @@ class ConsolePortTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class ConsoleServerPortTemplateSerializer(ValidatedModelSerializer):
|
class ConsoleServerPortTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False,
|
required=False,
|
||||||
@ -87,7 +91,7 @@ class ConsoleServerPortTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class PowerPortTemplateSerializer(ValidatedModelSerializer):
|
class PowerPortTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False,
|
required=False,
|
||||||
@ -116,7 +120,7 @@ class PowerPortTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class PowerOutletTemplateSerializer(ValidatedModelSerializer):
|
class PowerOutletTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False,
|
required=False,
|
||||||
@ -156,7 +160,7 @@ class PowerOutletTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class InterfaceTemplateSerializer(ValidatedModelSerializer):
|
class InterfaceTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False,
|
required=False,
|
||||||
@ -202,7 +206,7 @@ class InterfaceTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class RearPortTemplateSerializer(ValidatedModelSerializer):
|
class RearPortTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
required=False,
|
required=False,
|
||||||
nested=True,
|
nested=True,
|
||||||
@ -226,7 +230,7 @@ class RearPortTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class FrontPortTemplateSerializer(ValidatedModelSerializer):
|
class FrontPortTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False,
|
required=False,
|
||||||
@ -251,7 +255,7 @@ class FrontPortTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class ModuleBayTemplateSerializer(ValidatedModelSerializer):
|
class ModuleBayTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False,
|
required=False,
|
||||||
@ -274,7 +278,7 @@ class ModuleBayTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class DeviceBayTemplateSerializer(ValidatedModelSerializer):
|
class DeviceBayTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True
|
nested=True
|
||||||
)
|
)
|
||||||
@ -288,7 +292,7 @@ class DeviceBayTemplateSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
brief_fields = ('id', 'url', 'display', 'name', 'description')
|
||||||
|
|
||||||
|
|
||||||
class InventoryItemTemplateSerializer(ValidatedModelSerializer):
|
class InventoryItemTemplateSerializer(ComponentTemplateSerializer):
|
||||||
device_type = DeviceTypeSerializer(
|
device_type = DeviceTypeSerializer(
|
||||||
nested=True
|
nested=True
|
||||||
)
|
)
|
||||||
|
@ -11,6 +11,7 @@ from ipam.choices import VLANQinQRoleChoices
|
|||||||
from ipam.models import ASN, VLAN, VLANGroup, VRF
|
from ipam.models import ASN, VLAN, VLANGroup, VRF
|
||||||
from netbox.choices import *
|
from netbox.choices import *
|
||||||
from netbox.forms import NetBoxModelBulkEditForm
|
from netbox.forms import NetBoxModelBulkEditForm
|
||||||
|
from netbox.forms.mixins import ChangeLoggingMixin
|
||||||
from tenancy.models import Tenant
|
from tenancy.models import Tenant
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from utilities.forms import BulkEditForm, add_blank_choice, form_from_model
|
from utilities.forms import BulkEditForm, add_blank_choice, form_from_model
|
||||||
@ -1037,7 +1038,11 @@ class PowerFeedBulkEditForm(NetBoxModelBulkEditForm):
|
|||||||
# Device component templates
|
# Device component templates
|
||||||
#
|
#
|
||||||
|
|
||||||
class ConsolePortTemplateBulkEditForm(BulkEditForm):
|
class ComponentTemplateBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ConsolePortTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=ConsolePortTemplate.objects.all(),
|
queryset=ConsolePortTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1056,7 +1061,7 @@ class ConsolePortTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('label', 'type', 'description')
|
nullable_fields = ('label', 'type', 'description')
|
||||||
|
|
||||||
|
|
||||||
class ConsoleServerPortTemplateBulkEditForm(BulkEditForm):
|
class ConsoleServerPortTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=ConsoleServerPortTemplate.objects.all(),
|
queryset=ConsoleServerPortTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1079,7 +1084,7 @@ class ConsoleServerPortTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('label', 'type', 'description')
|
nullable_fields = ('label', 'type', 'description')
|
||||||
|
|
||||||
|
|
||||||
class PowerPortTemplateBulkEditForm(BulkEditForm):
|
class PowerPortTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=PowerPortTemplate.objects.all(),
|
queryset=PowerPortTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1114,7 +1119,7 @@ class PowerPortTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('label', 'type', 'maximum_draw', 'allocated_draw', 'description')
|
nullable_fields = ('label', 'type', 'maximum_draw', 'allocated_draw', 'description')
|
||||||
|
|
||||||
|
|
||||||
class PowerOutletTemplateBulkEditForm(BulkEditForm):
|
class PowerOutletTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=PowerOutletTemplate.objects.all(),
|
queryset=PowerOutletTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1165,7 +1170,7 @@ class PowerOutletTemplateBulkEditForm(BulkEditForm):
|
|||||||
self.fields['power_port'].widget.attrs['disabled'] = True
|
self.fields['power_port'].widget.attrs['disabled'] = True
|
||||||
|
|
||||||
|
|
||||||
class InterfaceTemplateBulkEditForm(BulkEditForm):
|
class InterfaceTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=InterfaceTemplate.objects.all(),
|
queryset=InterfaceTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1216,7 +1221,7 @@ class InterfaceTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('label', 'description', 'poe_mode', 'poe_type', 'rf_role')
|
nullable_fields = ('label', 'description', 'poe_mode', 'poe_type', 'rf_role')
|
||||||
|
|
||||||
|
|
||||||
class FrontPortTemplateBulkEditForm(BulkEditForm):
|
class FrontPortTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=FrontPortTemplate.objects.all(),
|
queryset=FrontPortTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1243,7 +1248,7 @@ class FrontPortTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('description',)
|
nullable_fields = ('description',)
|
||||||
|
|
||||||
|
|
||||||
class RearPortTemplateBulkEditForm(BulkEditForm):
|
class RearPortTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=RearPortTemplate.objects.all(),
|
queryset=RearPortTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1270,7 +1275,7 @@ class RearPortTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('description',)
|
nullable_fields = ('description',)
|
||||||
|
|
||||||
|
|
||||||
class ModuleBayTemplateBulkEditForm(BulkEditForm):
|
class ModuleBayTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=ModuleBayTemplate.objects.all(),
|
queryset=ModuleBayTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1288,7 +1293,7 @@ class ModuleBayTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('label', 'position', 'description')
|
nullable_fields = ('label', 'position', 'description')
|
||||||
|
|
||||||
|
|
||||||
class DeviceBayTemplateBulkEditForm(BulkEditForm):
|
class DeviceBayTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=DeviceBayTemplate.objects.all(),
|
queryset=DeviceBayTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
@ -1306,7 +1311,7 @@ class DeviceBayTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('label', 'description')
|
nullable_fields = ('label', 'description')
|
||||||
|
|
||||||
|
|
||||||
class InventoryItemTemplateBulkEditForm(BulkEditForm):
|
class InventoryItemTemplateBulkEditForm(ComponentTemplateBulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=InventoryItemTemplate.objects.all(),
|
queryset=InventoryItemTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput()
|
widget=forms.MultipleHiddenInput()
|
||||||
|
@ -8,7 +8,7 @@ from dcim.api.serializers_.sites import LocationSerializer, RegionSerializer, Si
|
|||||||
from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup
|
from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup
|
||||||
from extras.models import ConfigContext, Tag
|
from extras.models import ConfigContext, Tag
|
||||||
from netbox.api.fields import SerializedPKRelatedField
|
from netbox.api.fields import SerializedPKRelatedField
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
from tenancy.api.serializers_.tenants import TenantSerializer, TenantGroupSerializer
|
from tenancy.api.serializers_.tenants import TenantSerializer, TenantGroupSerializer
|
||||||
from tenancy.models import Tenant, TenantGroup
|
from tenancy.models import Tenant, TenantGroup
|
||||||
from virtualization.api.serializers_.clusters import ClusterSerializer, ClusterGroupSerializer, ClusterTypeSerializer
|
from virtualization.api.serializers_.clusters import ClusterSerializer, ClusterGroupSerializer, ClusterTypeSerializer
|
||||||
@ -19,7 +19,7 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ConfigContextSerializer(ValidatedModelSerializer):
|
class ConfigContextSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
regions = SerializedPKRelatedField(
|
regions = SerializedPKRelatedField(
|
||||||
queryset=Region.objects.all(),
|
queryset=Region.objects.all(),
|
||||||
serializer=RegionSerializer,
|
serializer=RegionSerializer,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from core.api.serializers_.data import DataFileSerializer, DataSourceSerializer
|
from core.api.serializers_.data import DataFileSerializer, DataSourceSerializer
|
||||||
from extras.models import ConfigTemplate
|
from extras.models import ConfigTemplate
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
from netbox.api.serializers.features import TaggableModelSerializer
|
from netbox.api.serializers.features import TaggableModelSerializer
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
@ -8,7 +8,7 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ConfigTemplateSerializer(TaggableModelSerializer, ValidatedModelSerializer):
|
class ConfigTemplateSerializer(ChangeLogMessageSerializer, TaggableModelSerializer, ValidatedModelSerializer):
|
||||||
data_source = DataSourceSerializer(
|
data_source = DataSourceSerializer(
|
||||||
nested=True,
|
nested=True,
|
||||||
required=False
|
required=False
|
||||||
|
@ -7,7 +7,7 @@ from core.models import ObjectType
|
|||||||
from extras.choices import *
|
from extras.choices import *
|
||||||
from extras.models import CustomField, CustomFieldChoiceSet
|
from extras.models import CustomField, CustomFieldChoiceSet
|
||||||
from netbox.api.fields import ChoiceField, ContentTypeField
|
from netbox.api.fields import ChoiceField, ContentTypeField
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'CustomFieldChoiceSetSerializer',
|
'CustomFieldChoiceSetSerializer',
|
||||||
@ -15,7 +15,7 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CustomFieldChoiceSetSerializer(ValidatedModelSerializer):
|
class CustomFieldChoiceSetSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
base_choices = ChoiceField(
|
base_choices = ChoiceField(
|
||||||
choices=CustomFieldChoiceSetBaseChoices,
|
choices=CustomFieldChoiceSetBaseChoices,
|
||||||
required=False
|
required=False
|
||||||
@ -36,7 +36,7 @@ class CustomFieldChoiceSetSerializer(ValidatedModelSerializer):
|
|||||||
brief_fields = ('id', 'url', 'display', 'name', 'description', 'choices_count')
|
brief_fields = ('id', 'url', 'display', 'name', 'description', 'choices_count')
|
||||||
|
|
||||||
|
|
||||||
class CustomFieldSerializer(ValidatedModelSerializer):
|
class CustomFieldSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
object_types = ContentTypeField(
|
object_types = ContentTypeField(
|
||||||
queryset=ObjectType.objects.with_feature('custom_fields'),
|
queryset=ObjectType.objects.with_feature('custom_fields'),
|
||||||
many=True
|
many=True
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
from core.models import ObjectType
|
from core.models import ObjectType
|
||||||
from extras.models import CustomLink
|
from extras.models import CustomLink
|
||||||
from netbox.api.fields import ContentTypeField
|
from netbox.api.fields import ContentTypeField
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'CustomLinkSerializer',
|
'CustomLinkSerializer',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CustomLinkSerializer(ValidatedModelSerializer):
|
class CustomLinkSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
object_types = ContentTypeField(
|
object_types = ContentTypeField(
|
||||||
queryset=ObjectType.objects.with_feature('custom_links'),
|
queryset=ObjectType.objects.with_feature('custom_links'),
|
||||||
many=True
|
many=True
|
||||||
|
@ -2,14 +2,14 @@ from core.api.serializers_.data import DataFileSerializer, DataSourceSerializer
|
|||||||
from core.models import ObjectType
|
from core.models import ObjectType
|
||||||
from extras.models import ExportTemplate
|
from extras.models import ExportTemplate
|
||||||
from netbox.api.fields import ContentTypeField
|
from netbox.api.fields import ContentTypeField
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'ExportTemplateSerializer',
|
'ExportTemplateSerializer',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ExportTemplateSerializer(ValidatedModelSerializer):
|
class ExportTemplateSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
object_types = ContentTypeField(
|
object_types = ContentTypeField(
|
||||||
queryset=ObjectType.objects.with_feature('export_templates'),
|
queryset=ObjectType.objects.with_feature('export_templates'),
|
||||||
many=True
|
many=True
|
||||||
|
@ -4,7 +4,7 @@ from rest_framework import serializers
|
|||||||
from core.models import ObjectType
|
from core.models import ObjectType
|
||||||
from extras.models import Notification, NotificationGroup, Subscription
|
from extras.models import Notification, NotificationGroup, Subscription
|
||||||
from netbox.api.fields import ContentTypeField, SerializedPKRelatedField
|
from netbox.api.fields import ContentTypeField, SerializedPKRelatedField
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
from users.api.serializers_.users import GroupSerializer, UserSerializer
|
from users.api.serializers_.users import GroupSerializer, UserSerializer
|
||||||
from users.models import Group, User
|
from users.models import Group, User
|
||||||
from utilities.api import get_serializer_for_model
|
from utilities.api import get_serializer_for_model
|
||||||
@ -37,7 +37,7 @@ class NotificationSerializer(ValidatedModelSerializer):
|
|||||||
return serializer(instance.object, nested=True, context=context).data
|
return serializer(instance.object, nested=True, context=context).data
|
||||||
|
|
||||||
|
|
||||||
class NotificationGroupSerializer(ValidatedModelSerializer):
|
class NotificationGroupSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
groups = SerializedPKRelatedField(
|
groups = SerializedPKRelatedField(
|
||||||
queryset=Group.objects.all(),
|
queryset=Group.objects.all(),
|
||||||
serializer=GroupSerializer,
|
serializer=GroupSerializer,
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
from core.models import ObjectType
|
from core.models import ObjectType
|
||||||
from extras.models import SavedFilter
|
from extras.models import SavedFilter
|
||||||
from netbox.api.fields import ContentTypeField
|
from netbox.api.fields import ContentTypeField
|
||||||
from netbox.api.serializers import ValidatedModelSerializer
|
from netbox.api.serializers import ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'SavedFilterSerializer',
|
'SavedFilterSerializer',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class SavedFilterSerializer(ValidatedModelSerializer):
|
class SavedFilterSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
object_types = ContentTypeField(
|
object_types = ContentTypeField(
|
||||||
queryset=ObjectType.objects.all(),
|
queryset=ObjectType.objects.all(),
|
||||||
many=True
|
many=True
|
||||||
|
@ -5,7 +5,7 @@ from core.models import ObjectType
|
|||||||
from extras.models import Tag, TaggedItem
|
from extras.models import Tag, TaggedItem
|
||||||
from netbox.api.exceptions import SerializerNotFound
|
from netbox.api.exceptions import SerializerNotFound
|
||||||
from netbox.api.fields import ContentTypeField, RelatedObjectCountField
|
from netbox.api.fields import ContentTypeField, RelatedObjectCountField
|
||||||
from netbox.api.serializers import BaseModelSerializer, ValidatedModelSerializer
|
from netbox.api.serializers import BaseModelSerializer, ChangeLogMessageSerializer, ValidatedModelSerializer
|
||||||
from utilities.api import get_serializer_for_model
|
from utilities.api import get_serializer_for_model
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
@ -14,7 +14,7 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TagSerializer(ValidatedModelSerializer):
|
class TagSerializer(ChangeLogMessageSerializer, ValidatedModelSerializer):
|
||||||
object_types = ContentTypeField(
|
object_types = ContentTypeField(
|
||||||
queryset=ObjectType.objects.with_feature('tags'),
|
queryset=ObjectType.objects.with_feature('tags'),
|
||||||
many=True,
|
many=True,
|
||||||
|
@ -5,6 +5,7 @@ from extras.choices import *
|
|||||||
from extras.models import *
|
from extras.models import *
|
||||||
from netbox.events import get_event_type_choices
|
from netbox.events import get_event_type_choices
|
||||||
from netbox.forms import NetBoxModelBulkEditForm
|
from netbox.forms import NetBoxModelBulkEditForm
|
||||||
|
from netbox.forms.mixins import ChangeLoggingMixin
|
||||||
from utilities.forms import BulkEditForm, add_blank_choice
|
from utilities.forms import BulkEditForm, add_blank_choice
|
||||||
from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField
|
from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField
|
||||||
from utilities.forms.rendering import FieldSet
|
from utilities.forms.rendering import FieldSet
|
||||||
@ -27,7 +28,7 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CustomFieldBulkEditForm(BulkEditForm):
|
class CustomFieldBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=CustomField.objects.all(),
|
queryset=CustomField.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -95,7 +96,7 @@ class CustomFieldBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('group_name', 'description', 'choice_set')
|
nullable_fields = ('group_name', 'description', 'choice_set')
|
||||||
|
|
||||||
|
|
||||||
class CustomFieldChoiceSetBulkEditForm(BulkEditForm):
|
class CustomFieldChoiceSetBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=CustomFieldChoiceSet.objects.all(),
|
queryset=CustomFieldChoiceSet.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -115,7 +116,7 @@ class CustomFieldChoiceSetBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('base_choices', 'description')
|
nullable_fields = ('base_choices', 'description')
|
||||||
|
|
||||||
|
|
||||||
class CustomLinkBulkEditForm(BulkEditForm):
|
class CustomLinkBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=CustomLink.objects.all(),
|
queryset=CustomLink.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -141,7 +142,7 @@ class CustomLinkBulkEditForm(BulkEditForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ExportTemplateBulkEditForm(BulkEditForm):
|
class ExportTemplateBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=ExportTemplate.objects.all(),
|
queryset=ExportTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -174,7 +175,7 @@ class ExportTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
|
nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
|
||||||
|
|
||||||
|
|
||||||
class SavedFilterBulkEditForm(BulkEditForm):
|
class SavedFilterBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=SavedFilter.objects.all(),
|
queryset=SavedFilter.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -294,7 +295,7 @@ class EventRuleBulkEditForm(NetBoxModelBulkEditForm):
|
|||||||
nullable_fields = ('description', 'conditions')
|
nullable_fields = ('description', 'conditions')
|
||||||
|
|
||||||
|
|
||||||
class TagBulkEditForm(BulkEditForm):
|
class TagBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=Tag.objects.all(),
|
queryset=Tag.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -316,7 +317,7 @@ class TagBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('description',)
|
nullable_fields = ('description',)
|
||||||
|
|
||||||
|
|
||||||
class ConfigContextBulkEditForm(BulkEditForm):
|
class ConfigContextBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=ConfigContext.objects.all(),
|
queryset=ConfigContext.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -340,7 +341,7 @@ class ConfigContextBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('description',)
|
nullable_fields = ('description',)
|
||||||
|
|
||||||
|
|
||||||
class ConfigTemplateBulkEditForm(BulkEditForm):
|
class ConfigTemplateBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=ConfigTemplate.objects.all(),
|
queryset=ConfigTemplate.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -373,7 +374,7 @@ class ConfigTemplateBulkEditForm(BulkEditForm):
|
|||||||
nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
|
nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
|
||||||
|
|
||||||
|
|
||||||
class JournalEntryBulkEditForm(BulkEditForm):
|
class JournalEntryBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=JournalEntry.objects.all(),
|
queryset=JournalEntry.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
@ -386,7 +387,7 @@ class JournalEntryBulkEditForm(BulkEditForm):
|
|||||||
comments = CommentField()
|
comments = CommentField()
|
||||||
|
|
||||||
|
|
||||||
class NotificationGroupBulkEditForm(BulkEditForm):
|
class NotificationGroupBulkEditForm(ChangeLoggingMixin, BulkEditForm):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
queryset=NotificationGroup.objects.all(),
|
queryset=NotificationGroup.objects.all(),
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
|
@ -585,7 +585,7 @@ class TagForm(ChangeLoggingMixin, forms.ModelForm):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class ConfigContextForm(SyncedDataMixin, forms.ModelForm):
|
class ConfigContextForm(ChangeLoggingMixin, SyncedDataMixin, forms.ModelForm):
|
||||||
regions = DynamicModelMultipleChoiceField(
|
regions = DynamicModelMultipleChoiceField(
|
||||||
label=_('Regions'),
|
label=_('Regions'),
|
||||||
queryset=Region.objects.all(),
|
queryset=Region.objects.all(),
|
||||||
@ -697,7 +697,7 @@ class ConfigContextForm(SyncedDataMixin, forms.ModelForm):
|
|||||||
return self.cleaned_data
|
return self.cleaned_data
|
||||||
|
|
||||||
|
|
||||||
class ConfigTemplateForm(SyncedDataMixin, forms.ModelForm):
|
class ConfigTemplateForm(ChangeLoggingMixin, SyncedDataMixin, forms.ModelForm):
|
||||||
tags = DynamicModelMultipleChoiceField(
|
tags = DynamicModelMultipleChoiceField(
|
||||||
label=_('Tags'),
|
label=_('Tags'),
|
||||||
queryset=Tag.objects.all(),
|
queryset=Tag.objects.all(),
|
||||||
|
Loading…
Reference in New Issue
Block a user