| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from django.contrib.auth.models import Group, User
- from django.contrib.contenttypes.models import ContentType
- from rest_framework import serializers
- from netbox.api import ContentTypeField, WritableNestedSerializer
- from users.models import ObjectPermission, Token
- __all__ = [
- 'NestedGroupSerializer',
- 'NestedObjectPermissionSerializer',
- 'NestedTokenSerializer',
- 'NestedUserSerializer',
- ]
- class NestedGroupSerializer(WritableNestedSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail')
- class Meta:
- model = Group
- fields = ['id', 'url', 'display', 'name']
- class NestedUserSerializer(WritableNestedSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='users-api:user-detail')
- display = serializers.SerializerMethodField(read_only=True)
- class Meta:
- model = User
- fields = ['id', 'url', 'display', 'username']
- def get_display(self, obj):
- if full_name := obj.get_full_name():
- return f"{obj.username} ({full_name})"
- return obj.username
- class NestedTokenSerializer(WritableNestedSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='users-api:token-detail')
- class Meta:
- model = Token
- fields = ['id', 'url', 'display', 'key', 'write_enabled']
- class NestedObjectPermissionSerializer(WritableNestedSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='users-api:objectpermission-detail')
- object_types = ContentTypeField(
- queryset=ContentType.objects.all(),
- many=True
- )
- groups = serializers.SerializerMethodField(read_only=True)
- users = serializers.SerializerMethodField(read_only=True)
- class Meta:
- model = ObjectPermission
- fields = ['id', 'url', 'display', 'name', 'enabled', 'object_types', 'groups', 'users', 'actions']
- def get_groups(self, obj):
- return [g.name for g in obj.groups.all()]
- def get_users(self, obj):
- return [u.username for u in obj.users.all()]
|