from rest_framework import serializers
from .models import 
EvaluationTest,Question,Choice,GradeEvaluationText,Category
from users.models import User


class StringSerializer(serializers.StringRelatedField):
def to_internal_value(self,value):
return value

class QuestionSerializer(serializers.ModelSerializer):
choices = StringSerializer(many=True)
class Meta:
model = Question
fields = ('id','choices','question','order')

class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields='__all__'

class EvaluationTestSerializer(serializers.ModelSerializer):
questions = serializers.SerializerMethodField()
admin = StringSerializer(many=False)
category = StringSerializer(many=False)
class Meta:
model = EvaluationTest
fields='__all__'

def get_questions(self,obj):
questions = QuestionSerializer(obj.questions.all(), many=True).data
return questions

def create(self,request):
data = request.data
print(data)
evaluationtest = EvaluationTest()
admin= User.objects.get(username=data['admin'])
cat=Category.objects.get(id=data['category'])
print(cat)
evaluationtest.category=cat
evaluationtest.admin = admin
evaluationtest.title = data['title']
evaluationtest.type = data['type']
evaluationtest.save()
order = 1
for q in data['questions']:
newQ = Question()
newQ.question=q['title']
newQ.order = order
newQ.save()

for c in q['choices']:
newC = Choice()
newC.title = c
newC.save()
newQ.choices.add(newC)
newQ.answer = Choice.objects.get(title=q['answer'])
newQ.evaluationtest = evaluationtest
newQ.save()
order += 1
return evaluationtest

# def update(self,instance,validated_data):
# # data = request.data
# # print(data)
# # evaluationtest = EvaluationTest()
# # admin= User.objects.get('username')
# # cat=Category.objects.get('id')
# # print(cat)
# # instance.category=cat
# instance.category = validated_data.get('id',instance.category)
# instance.title = validated_data.get('title',instance.title)
# instance.type = validated_data.get('type',instance.type)
# instance.save()

# instance = EvaluationTest()
# # keep_questions=[]
# # existing_id=[q.id for q in instance.questions]
# order = 1
# for q in instance['questions']:
# newQ = Question()
# newQ.question=q['title']
# newQ.order = order
# newQ.save()

# for c in q['choices']:
# newC = Choice()
# newC.title = c
# newC.save()
# newQ.choices.add(newC)
# newQ.answer = Choice.objects.get(title=q['answer'])
# newQ.instance = instance
# newQ.save()
# order += 1
# return instance


# def update(self,instance,validated_data):
# questions = validated_data.pop('questions')
# admin = validated_data.pop('admin')
# category = validated_data.poop('category')
# instance.title = validated_data.get('title',instance.title)
# instance.type = validated_data.get('type',instance.type)
# instance.save()
# keep_question = []
# existing_id = [q.id for q in instance.questions]

# for question in questions:
# if "id" in question.keys():
# if Question.objects.filter(id=question["id"]).exists():
# q = Question.objects.get(id=questions["id"])
# q.title = question.get('title',q.title)
# q.order = question.get('order',q.order)
# q.save()
# keep_question.append(q.id)
# else:
# continue
# else:
# q = Question.objects.create(**question,evaluationtest=evaluationtest)
# keep_question.append(q.id)





class GradeEvaluationTextSerializer(serializers.ModelSerializer):
candidate = StringSerializer(many=False)
class Meta:
model = GradeEvaluationText
fields=('__all__')
def create(self,request):
data = request.data
print(data)
evaluationtest = EvaluationTest.objects.get(id=data['testId'])
candidate = User.objects.get(username=data['username'])

graded_test = GradeEvaluationText()
graded_test.evaluationtest = evaluationtest
graded_test.candidate = candidate

questions = [q for q in evaluationtest.questions.all()]
answers = [data['answers'][a] for a in data['answers']]
answered_correct_count = 0

for i in range(len(questions)):
if questions[i].answer.title == answers[i]:
answered_correct_count +=1
i +=1
grades = answered_correct_count/len(questions)*100
graded_test.grades = grades
graded_test.save()
return graded_test
SERIALIZER.py

On Thursday, March 28, 2019 at 12:25:32 PM UTC+1, zohaib younis wrote:
>
> class EvaluationTestSerializer(serializers.ModelSerializer):
> questions = serializers.SerializerMethodField()
> admin = StringSerializer(many=False)
> category = StringSerializer(many=False)
> class Meta:
> model = EvaluationTest
> fields='__all__'
>
> def get_questions(self,obj):
> questions = QuestionSerializer(obj.questions.all(), many=True).data
> return questions
>
> def create(self,request):
> data = request.data
> print(data)
> evaluationtest = EvaluationTest()
> admin= User.objects.get(username=data['admin'])
> cat=Category.objects.get(id=data['category'])
> print(cat)
> evaluationtest.category=cat
> evaluationtest.admin = admin
> evaluationtest.title = data['title']
> evaluationtest.type = data['type']
> evaluationtest.save()
> order = 1
> for q in data['questions']:
> newQ = Question()
> newQ.question=q['title']
> newQ.order = order
> newQ.save()
>
> for c in q['choices']:
> newC = Choice()
> newC.title = c
> newC.save()
> newQ.choices.add(newC)
> newQ.answer = Choice.objects.get(title=q['answer'])
> newQ.evaluationtest = evaluationtest
> newQ.save()
> order += 1
> return evaluationtest
>
> # def update(self,instance,validated_data):
> # # data = request.data
> # # print(data)
> # # evaluationtest = EvaluationTest()
> # # admin= User.objects.get('username')
> # # cat=Category.objects.get('id')
> # # print(cat)
> # # instance.category=cat
> # instance.category = validated_data.get('id',instance.category)
> # instance.title = validated_data.get('title',instance.title)
> # instance.type = validated_data.get('type',instance.type)
> # instance.save()
>
> # instance = EvaluationTest()
> # # keep_questions=[]
> # # existing_id=[q.id for q in instance.questions]
> # order = 1
> # for q in instance['questions']:
> # newQ = Question()
> # newQ.question=q['title']
> # newQ.order = order
> # newQ.save()
>
> # for c in q['choices']:
> # newC = Choice()
> # newC.title = c
> # newC.save()
> # newQ.choices.add(newC)
> # newQ.answer = Choice.objects.get(title=q['answer'])
> # newQ.instance = instance
> # newQ.save()
> # order += 1
> # return instance
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-rest-framework+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to