Skip to content
Snippets Groups Projects
serializers.py 2.17 KiB
Newer Older
"""
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
borzechof99's avatar
borzechof99 committed
        fields = ("id", "name", "url", "criteria_ratings")
class QuestionListSerializer(serializers.ModelSerializer):
    """
    Serializes all Questions.
    """

    class Meta:
        model = Question

borzechof99's avatar
borzechof99 committed
        fields = ("id", "text", "criterion")
class CriterionListSerializer(serializers.ModelSerializer):
    """
    Serializes Criterions
    """

    class Meta:
        model = Criterion
borzechof99's avatar
borzechof99 committed
        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