--- a/src/notes/api/serializers/core.py Sun Jul 30 01:02:09 2017 +0200
+++ b/src/notes/api/serializers/core.py Mon Jul 31 23:18:38 2017 +0200
@@ -3,8 +3,10 @@
"""
import logging
+from django.contrib.auth.models import Group
+from rest_framework import serializers
+
from notes.models import Note, Session
-from rest_framework import serializers
logger = logging.getLogger(__name__)
@@ -87,40 +89,63 @@
owner = serializers.SlugRelatedField(
read_only=True, slug_field='username', default=serializers.CurrentUserDefault())
+ group = serializers.SlugRelatedField(read_only=True, slug_field='name')
class Meta:
model = Session
fields = (
'ext_id', 'version', 'date', 'created', 'updated',
- 'owner', 'title', 'description', 'protocol'
+ 'owner', 'title', 'description', 'protocol', 'group'
)
- read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner')
+ read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group')
class DetailSessionSerializer(serializers.ModelSerializer):
owner = serializers.SlugRelatedField(read_only=True, slug_field='username')
notes = DetailNoteSerializer(many=True, read_only=True)
+ group = serializers.SlugRelatedField(slug_field='name', read_only=True)
+
+ class Meta:
+ model = Session
+ fields = (
+ 'ext_id', 'version', 'date', 'created', 'updated',
+ 'owner', 'title', 'description', 'protocol', 'group',
+ 'notes'
+ )
+ read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group')
+
+class CreateSessionSerializer(serializers.ModelSerializer):
+
+ owner = serializers.SlugRelatedField(
+ read_only=True, slug_field='username', default=serializers.CurrentUserDefault())
+ group = serializers.SlugRelatedField(slug_field='name', queryset=Group.objects.all(), required=False)
class Meta:
model = Session
fields = (
'ext_id', 'version', 'date', 'created', 'updated',
- 'owner', 'title', 'description', 'protocol',
- 'notes'
- )
- read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner')
-
-class CreateSessionSerializer(serializers.ModelSerializer):
-
- owner = serializers.SlugRelatedField(
- read_only=True, slug_field='username', default=serializers.CurrentUserDefault())
-
-
- class Meta:
- model = Session
- fields = (
- 'ext_id', 'version', 'date', 'created', 'updated',
- 'owner', 'title', 'description', 'protocol'
+ 'owner', 'title', 'description', 'protocol', 'group'
)
read_only_fields = ('version', 'created', 'updated', 'owner')
+
+ def validate(self, data):
+ data = super().validate(data)
+
+ group = data.get('group')
+ owner = data.get('owner')
+
+ if group is None:
+ if owner and owner.profile and owner.profile.default_group:
+ group = owner.profile.default_group
+ if group is None and owner:
+ group = Group.objects.filter(profile__owner_personal=owner).first()
+
+ if group is None:
+ raise serializers.ValidationError("group field is required or default group or personal group could not be found for owner")
+ elif not owner in group.user_set.all():
+ raise serializers.ValidationError("Owner must be in group")
+
+ data['group'] = group
+ return data
+