Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
serializers.py 1.96 KiB
"""
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

            criterion_data["value"] = sport.get_rating(criterion)

            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