Newer
Older
"""
Serializers creating JSONs for every Model from .models
"""
from rest_framework import serializers

borzechof99
committed
from .models import Sport, Criterion, Question, CriterionRating, validate_rating
class SportListSerializer(serializers.ModelSerializer):
"""
Serializes all sports.
"""
class Meta:
model = Sport
class QuestionListSerializer(serializers.ModelSerializer):
"""
Serializes all Questions.
"""
class Meta:
model = Question
class CriterionListSerializer(serializers.ModelSerializer):
"""
Serializes Criterions
"""
class Meta:
model = Criterion
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):

borzechof99
committed
"""
The Data in the Request is taken and written to another Dictionary.
During this process, the Data is Validated on:
- whether Name and URL for Sport exist
- whether the Rating Value and Criterion ID are valid
"""

borzechof99
committed
data = {"valid_request": True}

borzechof99
committed
for field_value in ["name", "url"]:
try:
data[field_value] = request.data[field_value]
except:
data["valid_request"] = False
return data
data["criteria"] = []
for criterion in request.data["criteria"]:
value = criterion["value"]
try:
validate_rating(value)
crit = Criterion.objects.get(pk=criterion["id"])
except:
data["valid_request"] = False
return data
data["criteria"].append((crit, value))
return data