""" Serializers creating JSONs for every Model from .models """ from rest_framework import serializers from .models import Sport, Criterion, Question, CriterionRating class SportListSerializer(serializers.ModelSerializer): """ Serializes all sports. """ class Meta: model = Sport fields = ("id", "name", "url", "criteria_ratings") class QuestionListSerializer(serializers.ModelSerializer): """ Serializes all Questions. """ class Meta: model = Question fields = ("id", "text", "criterion") class CriterionListSerializer(serializers.ModelSerializer): """ Serializes Criterions """ class Meta: model = Criterion fields = ("id", "name") class SmallSportListSerializer(serializers.BaseSerializer): def to_representation(self, sport_instances): serialized_data = [] for sport, boolean in sport_instances: serialized_data.append( { "pk": sport.pk, "name": sport.name, "url": sport.url, "is_filled": boolean, } ) return serialized_data class SingleSportSerializer(serializers.BaseSerializer): def to_representation(self, sport): serialized_data = {} serialized_data["pk"] = sport.pk serialized_data["name"] = sport.name serialized_data["url"] = sport.url criteria = [] for criterion in sport.criteria_ratings.iterator(): criterion_data = {} criterion_data["pk"] = criterion.pk criterion_data["name"] = criterion.name # The iterator iterates over the Criterions connected, and not the criterion connection itself, so we need to get that one again criterion_data["value"] = CriterionRating.objects.get( criterion=criterion.pk, sport=sport.pk ).rating criteria.append(criterion_data) serialized_data["criteria"] = criteria return serialized_data def to_internal_value(self, request): # Probably do some Testing and Data Verification here? return request.data