85 |
87 |
86 class ListSessionSerializer(serializers.ModelSerializer): |
88 class ListSessionSerializer(serializers.ModelSerializer): |
87 |
89 |
88 owner = serializers.SlugRelatedField( |
90 owner = serializers.SlugRelatedField( |
89 read_only=True, slug_field='username', default=serializers.CurrentUserDefault()) |
91 read_only=True, slug_field='username', default=serializers.CurrentUserDefault()) |
|
92 group = serializers.SlugRelatedField(read_only=True, slug_field='name') |
90 |
93 |
91 class Meta: |
94 class Meta: |
92 model = Session |
95 model = Session |
93 fields = ( |
96 fields = ( |
94 'ext_id', 'version', 'date', 'created', 'updated', |
97 'ext_id', 'version', 'date', 'created', 'updated', |
95 'owner', 'title', 'description', 'protocol' |
98 'owner', 'title', 'description', 'protocol', 'group' |
96 ) |
99 ) |
97 read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner') |
100 read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group') |
98 |
101 |
99 |
102 |
100 class DetailSessionSerializer(serializers.ModelSerializer): |
103 class DetailSessionSerializer(serializers.ModelSerializer): |
101 |
104 |
102 owner = serializers.SlugRelatedField(read_only=True, slug_field='username') |
105 owner = serializers.SlugRelatedField(read_only=True, slug_field='username') |
103 notes = DetailNoteSerializer(many=True, read_only=True) |
106 notes = DetailNoteSerializer(many=True, read_only=True) |
|
107 group = serializers.SlugRelatedField(slug_field='name', read_only=True) |
104 |
108 |
105 class Meta: |
109 class Meta: |
106 model = Session |
110 model = Session |
107 fields = ( |
111 fields = ( |
108 'ext_id', 'version', 'date', 'created', 'updated', |
112 'ext_id', 'version', 'date', 'created', 'updated', |
109 'owner', 'title', 'description', 'protocol', |
113 'owner', 'title', 'description', 'protocol', 'group', |
110 'notes' |
114 'notes' |
111 ) |
115 ) |
112 read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner') |
116 read_only_fields = ('ext_id', 'version', 'created', 'updated', 'owner', 'group') |
113 |
117 |
114 class CreateSessionSerializer(serializers.ModelSerializer): |
118 class CreateSessionSerializer(serializers.ModelSerializer): |
115 |
119 |
116 owner = serializers.SlugRelatedField( |
120 owner = serializers.SlugRelatedField( |
117 read_only=True, slug_field='username', default=serializers.CurrentUserDefault()) |
121 read_only=True, slug_field='username', default=serializers.CurrentUserDefault()) |
118 |
122 group = serializers.SlugRelatedField(slug_field='name', queryset=Group.objects.all(), required=False) |
119 |
123 |
120 class Meta: |
124 class Meta: |
121 model = Session |
125 model = Session |
122 fields = ( |
126 fields = ( |
123 'ext_id', 'version', 'date', 'created', 'updated', |
127 'ext_id', 'version', 'date', 'created', 'updated', |
124 'owner', 'title', 'description', 'protocol' |
128 'owner', 'title', 'description', 'protocol', 'group' |
125 ) |
129 ) |
126 read_only_fields = ('version', 'created', 'updated', 'owner') |
130 read_only_fields = ('version', 'created', 'updated', 'owner') |
|
131 |
|
132 def validate(self, data): |
|
133 data = super().validate(data) |
|
134 |
|
135 group = data.get('group') |
|
136 owner = data.get('owner') |
|
137 |
|
138 if group is None: |
|
139 if owner and owner.profile and owner.profile.default_group: |
|
140 group = owner.profile.default_group |
|
141 if group is None and owner: |
|
142 group = Group.objects.filter(profile__owner_personal=owner).first() |
|
143 |
|
144 if group is None: |
|
145 raise serializers.ValidationError("group field is required or default group or personal group could not be found for owner") |
|
146 elif not owner in group.user_set.all(): |
|
147 raise serializers.ValidationError("Owner must be in group") |
|
148 |
|
149 data['group'] = group |
|
150 return data |
|
151 |