serializers.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 users.models import ObjectPermission
  5. from utilities.api import ContentTypeField, SerializedPKRelatedField, ValidatedModelSerializer
  6. from .nested_serializers import *
  7. class UserSerializer(ValidatedModelSerializer):
  8. url = serializers.HyperlinkedIdentityField(view_name='users-api:user-detail')
  9. groups = SerializedPKRelatedField(
  10. queryset=Group.objects.all(),
  11. serializer=NestedGroupSerializer,
  12. required=False,
  13. many=True
  14. )
  15. class Meta:
  16. model = User
  17. fields = (
  18. 'id', 'url', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'date_joined',
  19. 'groups',
  20. )
  21. class GroupSerializer(ValidatedModelSerializer):
  22. url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail')
  23. user_count = serializers.IntegerField(read_only=True)
  24. class Meta:
  25. model = Group
  26. fields = ('id', 'url', 'name', 'user_count')
  27. class ObjectPermissionSerializer(ValidatedModelSerializer):
  28. url = serializers.HyperlinkedIdentityField(view_name='users-api:objectpermission-detail')
  29. object_types = ContentTypeField(
  30. queryset=ContentType.objects.all(),
  31. many=True
  32. )
  33. groups = SerializedPKRelatedField(
  34. queryset=Group.objects.all(),
  35. serializer=NestedGroupSerializer,
  36. required=False,
  37. many=True
  38. )
  39. users = SerializedPKRelatedField(
  40. queryset=User.objects.all(),
  41. serializer=NestedUserSerializer,
  42. required=False,
  43. many=True
  44. )
  45. class Meta:
  46. model = ObjectPermission
  47. fields = (
  48. 'id', 'url', 'name', 'description', 'enabled', 'object_types', 'groups', 'users', 'actions', 'constraints',
  49. )