add parameter to filter session and note by updated date. Add pagination on sessions and notes. add read only endpoint at root level to list notes
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 = ['name', 'owner', 'description', 'users']
class WriteGroupSerializer(serializers.ModelSerializer):
'''
Serializers for writing groups.
'''
description = serializers.CharField(source='profile.description', required=False)
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