/
eb
/
kittygram2plus
Обзор
Документация
Войти
/
eb
/
kittygram2plus
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
cats/serializers.py
52 строки
2 KB
boreesych
initial commit
12 июл 2021, 23:58
12 июл 2021, 23:58
df5ae96
Код
Авторство
О чём код?
from rest_framework import serializers from rest_framework.validators import UniqueTogetherValidator import datetime as dt from .models import CHOICES, Achievement, AchievementCat, Cat, User class UserSerializer(serializers.ModelSerializer): cats = serializers.StringRelatedField(many=True, read_only=True) class Meta: model = User fields = ('id', 'username', 'first_name', 'last_name', 'cats') ref_name = 'ReadOnlyUsers' class AchievementSerializer(serializers.ModelSerializer): achievement_name = serializers.CharField(source='name') class Meta: model = Achievement fields = ('id', 'achievement_name') class CatSerializer(serializers.ModelSerializer): achievements = AchievementSerializer(many=True, required=False) color = serializers.ChoiceField(choices=CHOICES) age = serializers.SerializerMethodField() class Meta: model = Cat fields = ('id', 'name', 'color', 'birth_year', 'achievements', 'owner', 'age') read_only_fields = ('owner',) def get_age(self, obj): return dt.datetime.now().year - obj.birth_year def create(self, validated_data): if 'achievements' not in self.initial_data: cat = Cat.objects.create(**validated_data) return cat else: achievements = validated_data.pop('achievements') cat = Cat.objects.create(**validated_data) for achievement in achievements: current_achievement, status = Achievement.objects.get_or_create( **achievement) AchievementCat.objects.create( achievement=current_achievement, cat=cat) return cat