mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 17:26:10 -06:00
#12278 add ipaddressfieldserializer to nested serializers
This commit is contained in:
parent
91e546c800
commit
fb1827cac1
@ -1,11 +1,14 @@
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_spectacular.utils import extend_schema_serializer
|
||||
from rest_framework import serializers
|
||||
|
||||
from ipam import models
|
||||
from ipam.models.l2vpn import L2VPNTermination, L2VPN
|
||||
from ipam.validators import validate_ipaddress_with_mask
|
||||
from netbox.api.serializers import WritableNestedSerializer
|
||||
|
||||
__all__ = [
|
||||
'IPAddressField',
|
||||
'NestedAggregateSerializer',
|
||||
'NestedASNSerializer',
|
||||
'NestedASNRangeSerializer',
|
||||
@ -27,6 +30,23 @@ __all__ = [
|
||||
]
|
||||
|
||||
|
||||
#
|
||||
# IP address field
|
||||
#
|
||||
|
||||
class IPAddressField(serializers.CharField):
|
||||
"""IPAddressField with mask"""
|
||||
|
||||
default_error_messages = {
|
||||
'invalid': _('Enter a valid IPv4 or IPv6 address with optional mask.'),
|
||||
}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
validator = validate_ipaddress_with_mask
|
||||
self.validators.append(validator)
|
||||
|
||||
|
||||
#
|
||||
# ASN ranges
|
||||
#
|
||||
@ -182,6 +202,8 @@ class NestedPrefixSerializer(WritableNestedSerializer):
|
||||
class NestedIPRangeSerializer(WritableNestedSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:iprange-detail')
|
||||
family = serializers.IntegerField(read_only=True)
|
||||
start_address = IPAddressField()
|
||||
end_address = IPAddressField()
|
||||
|
||||
class Meta:
|
||||
model = models.IPRange
|
||||
@ -195,6 +217,7 @@ class NestedIPRangeSerializer(WritableNestedSerializer):
|
||||
class NestedIPAddressSerializer(WritableNestedSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
|
||||
family = serializers.IntegerField(read_only=True)
|
||||
address = IPAddressField()
|
||||
|
||||
class Meta:
|
||||
model = models.IPAddress
|
||||
|
@ -1,5 +1,4 @@
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_spectacular.utils import extend_schema_field
|
||||
from rest_framework import serializers
|
||||
|
||||
@ -7,7 +6,6 @@ from dcim.api.nested_serializers import NestedDeviceSerializer, NestedSiteSerial
|
||||
from ipam.choices import *
|
||||
from ipam.constants import IPADDRESS_ASSIGNMENT_MODELS, VLANGROUP_SCOPE_TYPES
|
||||
from ipam.models import *
|
||||
from ipam.validators import validate_ipaddress_with_mask
|
||||
from netaddr import AddrFormatError, IPNetwork
|
||||
from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField
|
||||
from netbox.api.serializers import NetBoxModelSerializer
|
||||
@ -372,6 +370,8 @@ class AvailablePrefixSerializer(serializers.Serializer):
|
||||
class IPRangeSerializer(NetBoxModelSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:iprange-detail')
|
||||
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
|
||||
start_address = IPAddressField()
|
||||
end_address = IPAddressField()
|
||||
vrf = NestedVRFSerializer(required=False, allow_null=True)
|
||||
tenant = NestedTenantSerializer(required=False, allow_null=True)
|
||||
status = ChoiceField(choices=IPRangeStatusChoices, required=False)
|
||||
@ -390,18 +390,6 @@ class IPRangeSerializer(NetBoxModelSerializer):
|
||||
#
|
||||
# IP addresses
|
||||
#
|
||||
class IPAddressField(serializers.CharField):
|
||||
"""IPAddressField with mask"""
|
||||
|
||||
default_error_messages = {
|
||||
'invalid': _('Enter a valid IPv4 or IPv6 address with optional mask.'),
|
||||
}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
validator = validate_ipaddress_with_mask
|
||||
self.validators.append(validator)
|
||||
|
||||
|
||||
class IPAddressSerializer(NetBoxModelSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
|
||||
|
Loading…
Reference in New Issue
Block a user