--- a/src/notes/api/serializers/auth.py Mon Jul 17 14:13:32 2017 +0200
+++ b/src/notes/api/serializers/auth.py Tue Jul 18 17:08:27 2017 +0200
@@ -1,11 +1,82 @@
import logging
+from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from rest_framework import serializers
logger = logging.getLogger(__name__)
+User = get_user_model()
+
class GroupSerializer(serializers.ModelSerializer):
+ owner = serializers.CharField(source='profile.owner.username', read_only=True)
+ description = serializers.CharField(source='profile.description')
+
+ class Meta:
+ model = Group
+ fields = ['name', 'owner', 'description']
+
+
+class DetailGroupSerializer(GroupSerializer):
+ users = serializers.SlugRelatedField(
+ many=True,
+ read_only=True,
+ slug_field='username',
+ source='user_set'
+ )
+
class Meta:
model = Group
- fields = '__all__'
+ fields = ['name', 'owner', 'description', 'users']
+
+class WriteGroupSerializer(serializers.ModelSerializer):
+ '''
+ Serializers for writing groups.
+ '''
+
+ description = serializers.CharField(source='profile.description')
+ users = serializers.SlugRelatedField(
+ many=True,
+ slug_field='username',
+ source='user_set',
+ queryset=User.objects.all(),
+ default=[]
+ )
+
+ class Meta:
+ model = Group
+ fields = ['name', 'description', 'users']
+
+
+ def create(self, validated_data):
+ profile_data = validated_data.pop('profile', None)
+
+ group = super().create(validated_data)
+
+ if profile_data is not None:
+ group.profile.description = profile_data.get('description')
+
+ user = None
+ request = self.context.get("request")
+ if request and hasattr(request, "user"):
+ user = request.user
+ group.user_set.add(user)
+ group.save()
+ group.profile.owner = user
+ group.profile.save()
+
+ return group
+
+ def update(self, instance, validated_data):
+ profile_data = validated_data.pop('profile', None)
+ group = super().update(instance, validated_data)
+
+ if profile_data is not None:
+ group.profile.description = profile_data.get('description')
+ group.profile.save()
+
+ # check that owner is still in user list
+ if group.profile.owner and group.profile.owner not in group.user_set.all():
+ group.user_set.add(group.profile.owner)
+
+ return group