nested_serializers.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from django.contrib.auth.models import Group, User
  2. from django.contrib.contenttypes.models import ContentType
  3. from rest_framework import serializers
  4. from netbox.api import ContentTypeField, WritableNestedSerializer
  5. from users.models import ObjectPermission
  6. __all__ = [
  7. 'NestedGroupSerializer',
  8. 'NestedObjectPermissionSerializer',
  9. 'NestedUserSerializer',
  10. ]
  11. class NestedGroupSerializer(WritableNestedSerializer):
  12. url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail')
  13. class Meta:
  14. model = Group
  15. fields = ['id', 'url', 'display', 'name']
  16. class NestedUserSerializer(WritableNestedSerializer):
  17. url = serializers.HyperlinkedIdentityField(view_name='users-api:user-detail')
  18. class Meta:
  19. model = User
  20. fields = ['id', 'url', 'display', 'username']
  21. class NestedObjectPermissionSerializer(WritableNestedSerializer):
  22. url = serializers.HyperlinkedIdentityField(view_name='users-api:objectpermission-detail')
  23. object_types = ContentTypeField(
  24. queryset=ContentType.objects.all(),
  25. many=True
  26. )
  27. groups = serializers.SerializerMethodField(read_only=True)
  28. users = serializers.SerializerMethodField(read_only=True)
  29. class Meta:
  30. model = ObjectPermission
  31. fields = ['id', 'url', 'display', 'name', 'enabled', 'object_types', 'groups', 'users', 'actions']
  32. def get_groups(self, obj):
  33. return [g.name for g in obj.groups.all()]
  34. def get_users(self, obj):
  35. return [u.username for u in obj.users.all()]