"""Serializer for app timetable""" from rest_framework import serializers from timetable.models import Timetable from establishment.models import Establishment class ScheduleRUDSerializer(serializers.ModelSerializer): """Serializer for Establishment model.""" weekday_display = serializers.CharField(source='get_weekday_display', read_only=True) class Meta: """Meta class.""" model = Timetable fields = [ 'id', 'weekday_display', 'lunch_start', 'lunch_end', 'dinner_start', 'dinner_end', ] class ScheduleCreateSerializer(ScheduleRUDSerializer): """Serializer for Establishment model.""" weekday = serializers.IntegerField(write_only=True) class Meta: """Meta class.""" model = Timetable fields = ScheduleRUDSerializer.Meta.fields + [ 'weekday', ] def validate(self, attrs): """Override validate method""" return attrs def create(self, validated_data): """Override create method""" instance = super().create(validated_data) weekday = validated_data.get('weekday') establishment_pk = self.context.get('request')\ .parser_context.get('view')\ .kwargs.get('pk') establishment_qs = Establishment.objects.filter(pk=establishment_pk) if not establishment_qs.exists(): # todo: replace on appropriate exception raise serializers.ValidationError() establishment = establishment_qs.first() schedule_qs = establishment.schedule.filter(weekday=weekday) if schedule_qs.exists(): schedule_qs.delete() establishment.schedule.add(instance) return instance