1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Add dynamic nesting support to SerializedPKRelatedField

This commit is contained in:
Jeremy Stretch
2024-02-27 14:00:42 -05:00
parent c382ba0ae0
commit ca56c8b9ef
19 changed files with 137 additions and 111 deletions

View File

@@ -6,7 +6,7 @@ from rest_framework import serializers
from netbox.api.fields import ContentTypeField, SerializedPKRelatedField
from netbox.api.serializers import ValidatedModelSerializer
from users.models import ObjectPermission
from ..nested_serializers import *
from .users import GroupSerializer, UserSerializer
__all__ = (
'ObjectPermissionSerializer',
@@ -21,13 +21,15 @@ class ObjectPermissionSerializer(ValidatedModelSerializer):
)
groups = SerializedPKRelatedField(
queryset=Group.objects.all(),
serializer=NestedGroupSerializer,
serializer=GroupSerializer,
nested=True,
required=False,
many=True
)
users = SerializedPKRelatedField(
queryset=get_user_model().objects.all(),
serializer=NestedUserSerializer,
serializer=UserSerializer,
nested=True,
required=False,
many=True
)

View File

@@ -6,7 +6,6 @@ from rest_framework import serializers
from netbox.api.fields import SerializedPKRelatedField
from netbox.api.serializers import ValidatedModelSerializer
from ..nested_serializers import *
__all__ = (
'GroupSerializer',
@@ -14,11 +13,22 @@ __all__ = (
)
class GroupSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail')
user_count = serializers.IntegerField(read_only=True)
class Meta:
model = Group
fields = ('id', 'url', 'display', 'name', 'user_count')
brief_fields = ('id', 'url', 'display', 'name')
class UserSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:user-detail')
groups = SerializedPKRelatedField(
queryset=Group.objects.all(),
serializer=NestedGroupSerializer,
serializer=GroupSerializer,
nested=True,
required=False,
many=True
)
@@ -60,13 +70,3 @@ class UserSerializer(ValidatedModelSerializer):
if full_name := obj.get_full_name():
return f"{obj.username} ({full_name})"
return obj.username
class GroupSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail')
user_count = serializers.IntegerField(read_only=True)
class Meta:
model = Group
fields = ('id', 'url', 'display', 'name', 'user_count')
brief_fields = ('id', 'url', 'display', 'name')