src/notes/api/serializers/auth.py
changeset 117 9864fe2067cd
parent 99 18fa4a1fa9e9
child 118 2cb8d11aa9ca
equal deleted inserted replaced
116:672e3c4bbd0c 117:9864fe2067cd
     1 import logging
     1 import logging
     2 
     2 
       
     3 from django.contrib.auth import get_user_model
     3 from django.contrib.auth.models import Group
     4 from django.contrib.auth.models import Group
     4 from rest_framework import serializers
     5 from rest_framework import serializers
     5 
     6 
     6 logger = logging.getLogger(__name__)
     7 logger = logging.getLogger(__name__)
     7 
     8 
       
     9 User = get_user_model()
       
    10 
     8 class GroupSerializer(serializers.ModelSerializer):
    11 class GroupSerializer(serializers.ModelSerializer):
       
    12     owner = serializers.CharField(source='profile.owner.username', read_only=True)
       
    13     description = serializers.CharField(source='profile.description')
       
    14 
     9     class Meta:
    15     class Meta:
    10         model = Group
    16         model = Group
    11         fields = '__all__'
    17         fields = ['name', 'owner', 'description']
       
    18 
       
    19 
       
    20 class DetailGroupSerializer(GroupSerializer):
       
    21     users = serializers.SlugRelatedField(
       
    22         many=True,
       
    23         read_only=True,
       
    24         slug_field='username',
       
    25         source='user_set'
       
    26     )
       
    27 
       
    28     class Meta:
       
    29         model = Group
       
    30         fields = ['name', 'owner', 'description', 'users']
       
    31 
       
    32 class WriteGroupSerializer(serializers.ModelSerializer):
       
    33     '''
       
    34     Serializers for writing groups.
       
    35     '''
       
    36 
       
    37     description = serializers.CharField(source='profile.description')
       
    38     users = serializers.SlugRelatedField(
       
    39         many=True,
       
    40         slug_field='username',
       
    41         source='user_set',
       
    42         queryset=User.objects.all(),
       
    43         default=[]
       
    44     )
       
    45 
       
    46     class Meta:
       
    47         model = Group
       
    48         fields = ['name', 'description', 'users']
       
    49 
       
    50 
       
    51     def create(self, validated_data):
       
    52         profile_data = validated_data.pop('profile', None)
       
    53 
       
    54         group = super().create(validated_data)
       
    55 
       
    56         if profile_data is not None:
       
    57             group.profile.description = profile_data.get('description')
       
    58 
       
    59         user = None
       
    60         request = self.context.get("request")
       
    61         if request and hasattr(request, "user"):
       
    62             user = request.user
       
    63             group.user_set.add(user)
       
    64             group.save()
       
    65         group.profile.owner = user
       
    66         group.profile.save()
       
    67 
       
    68         return group
       
    69 
       
    70     def update(self, instance, validated_data):
       
    71         profile_data = validated_data.pop('profile', None)
       
    72         group = super().update(instance, validated_data)
       
    73 
       
    74         if profile_data is not None:
       
    75             group.profile.description = profile_data.get('description')
       
    76             group.profile.save()
       
    77 
       
    78         # check that owner is still in user list
       
    79         if group.profile.owner and group.profile.owner not in group.user_set.all():
       
    80             group.user_set.add(group.profile.owner)
       
    81 
       
    82         return group