Я пытаюсь создать собственный метод сериализации, который подсчитывает количество пройденных и неудачных викторинов из моей модели QuizResults. Провальная викторина находится под знаком .7, а пройденная викторина - 7 или более.Django Rest Framework Пользовательский метод Serializer
Я хочу, чтобы иметь возможность просматривать QuizResult Users и подсчитывать количество пройденных опросов (.7 или более). Затем я дублировал метод, чтобы подсчитать неудачные викторины (под .7).
До сих пор у меня нет большой идеи о том, как это сделать. Я хочу иметь возможность захватить поле percent_correct модели и выполнить вычисление и добавить его в поле в сериализаторе под названием quiz_passed.
Вот моя QuizResult модель:
class QuizResult(models.Model):
quiz = models.ForeignKey(Quiz)
user = models.ForeignKey(User, related_name='quiz_parent')
percent_correct = models.FloatField(validators=[MinValueValidator(0.0), MaxValueValidator(1.0)])
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return 'Quiz Results for : ' + self.quiz.title
Вот мой сериализатору:
class ProfileSerializer(serializers.HyperlinkedModelSerializer):
todo_count = serializers.IntegerField(source='todo_parent.count', read_only=True)
discussion_count = serializers.IntegerField(source='comment_parent.count', read_only=True)
quiz_passed = serializers.SerializerMethodField()
class Meta:
model = User
fields = ('todo_count', 'discussion_count', 'quiz_passed', 'username',)
def get_quiz_passed(self, obj):
return passed
Любая помощь приветствуется.
Edit:
Я расширил модель пользователя и добавлен метод модели, как вы предложили.
class Profile(User):
def get_quizzes_passed_count(self):
return self.quiz_parent.filter(percent_correct__gte=0.8).count()
Затем я добавил ваше предложение в свой профиль. Сериализатор.
К сожалению, когда я добавляю это, в рамке ничего не появляется, как только они были добавлены. Какие-либо предложения? Спасибо.
'return self.quiz_parent.filter (percent_correct> 0.7) .count()' должен быть 'return self.quiz_parent.filter (percent_correct__gte = 0.7) .count()' – Fush
Спасибо, обновлено! – YPCrumble
Я применил ваши предложения, но они не сработали. Можете ли вы проверить мое редактирование? Спасибо вам за помощь! – Ryan113