gault-millau/apps/timetable/serialziers.py
2019-09-18 18:46:24 +03:00

59 lines
1.8 KiB
Python

"""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