J'essaie de créer une méthode de sérialisation personnalisée qui compte le nombre de quiz réussis ou échoués de mon modèle QuizResults. Un quiz échoué est sous .7 et un quiz passé est .7 ou plus. Je veux pouvoir consulter le QuizResult des utilisateurs et compter le nombre de quiz passés (.7 ou plus). Je dupliquerais alors la méthode pour compter les quiz échoués (sous .7).Méthode de sérialiseur personnalisé Django Rest Framework
Jusqu'à présent, je n'ai pas beaucoup d'idée sur la façon de le faire. Je veux être en mesure d'attraper le champ percent_correct du modèle et faire un calcul et l'ajouter à un champ dans le sérialiseur appelé "quiz_passed".
Voici mon modèle 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
Voici mon sérialiseur:
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
Toute aide est appréciée.
Edit:
J'ai étendu le modèle utilisateur et ajouté une méthode de modèle comme vous le suggérez.
class Profile(User):
def get_quizzes_passed_count(self):
return self.quiz_parent.filter(percent_correct__gte=0.8).count()
J'ai ensuite ajouté votre suggestion à mon ProfileSerializer.
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)
num_quizzes_passed = serializers.ReadOnlyField(source="get_quizzes_passed_count")
class Meta:
model = Profile
fields = ('todo_count', 'discussion_count', 'num_quizzes_passed', 'username')
Malheureusement, lorsque j'ajoute ceci, rien n'apparaît dans le cadre une fois que ceux-ci ont été ajoutés. Aucune suggestion? Je vous remercie.
'return self.quiz_parent.filter (percent_correct> 0.7) .count()' doit être 'return self.quiz_parent.filter (percent_correct__gte = 0.7) .count()' – Fush
Merci, mise à jour! – YPCrumble
J'ai appliqué vos suggestions, mais elles n'ont pas fonctionné. Pouvez-vous vérifier mon édition? Merci pour l'aide! – Ryan113