src/notes/api/serializers/core.py
changeset 133 6f3078f7fd47
parent 131 adad5563603c
child 142 56850f5c73f6
equal deleted inserted replaced
132:906a6c7c7943 133:6f3078f7fd47
     4 import logging
     4 import logging
     5 
     5 
     6 from django.contrib.auth.models import Group
     6 from django.contrib.auth.models import Group
     7 from rest_framework import serializers
     7 from rest_framework import serializers
     8 
     8 
       
     9 from notes.api.fields.category import ProtocolField
     9 from notes.models import Note, Session
    10 from notes.models import Note, Session
    10 
    11 
    11 logger = logging.getLogger(__name__)
    12 logger = logging.getLogger(__name__)
    12 
    13 
    13 
    14 
    88 class ListSessionSerializer(serializers.ModelSerializer):
    89 class ListSessionSerializer(serializers.ModelSerializer):
    89 
    90 
    90     owner = serializers.SlugRelatedField(
    91     owner = serializers.SlugRelatedField(
    91         read_only=True, slug_field='username', default=serializers.CurrentUserDefault())
    92         read_only=True, slug_field='username', default=serializers.CurrentUserDefault())
    92     group = serializers.SlugRelatedField(read_only=True, slug_field='name')
    93     group = serializers.SlugRelatedField(read_only=True, slug_field='name')
       
    94     protocol = ProtocolField(required=False)
    93 
    95 
    94     class Meta:
    96     class Meta:
    95         model = Session
    97         model = Session
    96         fields = (
    98         fields = (
    97             'ext_id', 'version', 'date', 'created', 'updated',
    99             'ext_id', 'version', 'date', 'created', 'updated',
    98             'owner', 'title', 'description', 'protocol', 'group'
   100             'owner', 'title', 'description', 'protocol', 'group'
    99         )
   101         )
   100         read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group')
   102         read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group', 'protocol')
   101 
   103 
   102 
   104 
   103 class DetailSessionSerializer(serializers.ModelSerializer):
   105 class DetailSessionSerializer(serializers.ModelSerializer):
   104 
   106 
   105     owner = serializers.SlugRelatedField(read_only=True, slug_field='username')
   107     owner = serializers.SlugRelatedField(read_only=True, slug_field='username')
   106     notes = DetailNoteSerializer(many=True, read_only=True)
   108     notes = DetailNoteSerializer(many=True, read_only=True)
   107     group = serializers.SlugRelatedField(slug_field='name', read_only=True)
   109     group = serializers.SlugRelatedField(slug_field='name', read_only=True)
       
   110     protocol = ProtocolField(required=False)
   108 
   111 
   109     class Meta:
   112     class Meta:
   110         model = Session
   113         model = Session
   111         fields = (
   114         fields = (
   112             'ext_id', 'version', 'date', 'created', 'updated',
   115             'ext_id', 'version', 'date', 'created', 'updated',
   113             'owner', 'title', 'description', 'protocol', 'group',
   116             'owner', 'title', 'description', 'protocol', 'group',
   114             'notes'
   117             'notes'
   115         )
   118         )
   116         read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group')
   119         read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group', 'protocol')
   117 
   120 
   118 class CreateSessionSerializer(serializers.ModelSerializer):
   121 class CreateSessionSerializer(serializers.ModelSerializer):
   119 
   122 
   120     owner = serializers.SlugRelatedField(
   123     owner = serializers.SlugRelatedField(
   121         read_only=True, slug_field='username', default=serializers.CurrentUserDefault())
   124         read_only=True, slug_field='username', default=serializers.CurrentUserDefault())
   122     group = serializers.SlugRelatedField(slug_field='name', queryset=Group.objects.all(), required=False)
   125     group = serializers.SlugRelatedField(slug_field='name', queryset=Group.objects.all(), required=False, allow_null=True)
       
   126     protocol = ProtocolField(required=False)
   123 
   127 
   124     class Meta:
   128     class Meta:
   125         model = Session
   129         model = Session
   126         fields = (
   130         fields = (
   127             'ext_id', 'version', 'date', 'created', 'updated',
   131             'ext_id', 'version', 'date', 'created', 'updated',
   146         elif not owner in group.user_set.all():
   150         elif not owner in group.user_set.all():
   147             raise serializers.ValidationError("Owner must be in group")
   151             raise serializers.ValidationError("Owner must be in group")
   148 
   152 
   149         data['group'] = group
   153         data['group'] = group
   150         return data
   154         return data
   151