src/notes/api/serializers/auth.py
changeset 133 6f3078f7fd47
parent 131 adad5563603c
child 142 56850f5c73f6
--- a/src/notes/api/serializers/auth.py	Tue Aug 01 12:20:14 2017 +0200
+++ b/src/notes/api/serializers/auth.py	Thu Aug 03 09:44:37 2017 +0200
@@ -2,8 +2,12 @@
 
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
+from rest_auth.serializers import \
+    UserDetailsSerializer as RestAuthUserDetailsSerializer
 from rest_framework import serializers
 
+from notes.api.fields.category import ProtocolField
+
 logger = logging.getLogger(__name__)
 
 User = get_user_model()
@@ -12,10 +16,11 @@
     owner = serializers.CharField(source='profile.owner.username', read_only=True)
     is_personal = serializers.BooleanField(source='profile.is_personal', read_only=True)
     description = serializers.CharField(source='profile.description')
+    protocol = ProtocolField(read_only=True, source='profile.protocol')
 
     class Meta:
         model = Group
-        fields = ['name', 'owner', 'is_personal', 'description']
+        fields = ['name', 'owner', 'is_personal', 'description', 'protocol']
 
 
 class DetailGroupSerializer(GroupSerializer):
@@ -28,7 +33,7 @@
 
     class Meta:
         model = Group
-        fields = ['name', 'owner', 'description', 'users', 'is_personal']
+        fields = ['name', 'owner', 'description', 'users', 'is_personal', 'protocol']
 
 
 class WriteGroupSerializer(serializers.ModelSerializer):
@@ -44,10 +49,11 @@
         queryset=User.objects.all(),
         default=[]
     )
+    protocol = ProtocolField(required=False, source='profile.protocol')
 
     class Meta:
         model = Group
-        fields = ['name', 'description', 'users']
+        fields = ['name', 'description', 'users', 'protocol']
 
 
     def create(self, validated_data):
@@ -55,7 +61,7 @@
 
         group = super().create(validated_data)
 
-        if profile_data is not None:
+        if profile_data is not None and profile_data.get('description', None) is not None:
             group.profile.description = profile_data.get('description')
 
         user = None
@@ -73,7 +79,8 @@
         profile_data = validated_data.pop('profile', None)
         group = super().update(instance, validated_data)
 
-        if profile_data is not None:
+        logger.debug("WriteGroupSerializer.update %r", profile_data)
+        if profile_data is not None and profile_data.get('description', None) is not None:
             group.profile.description = profile_data.get('description')
             group.profile.save()
 
@@ -82,3 +89,11 @@
             group.user_set.add(group.profile.owner)
 
         return group
+
+
+class UserDetailsSerializer(RestAuthUserDetailsSerializer):
+    default_group = serializers.SlugRelatedField(read_only=True, slug_field='name', source='profile.default_group')
+
+    class Meta(RestAuthUserDetailsSerializer.Meta):
+        fields = ('pk', 'username', 'email', 'first_name', 'last_name', 'default_group')
+        read_only_fields = ('email', 'default_group')