私はQuizResultsモデルから渡された、または失敗したクイズの数を数えるカスタムシリアライザメソッドを作成しようとしています。失敗したクイズは.7未満で、合格したクイズは.7以上です。Django Rest Frameworkカスタムシリアライザメソッド
私はユーザーQuizResultを調べ、渡されたクイズ(.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
すべてのヘルプは高く評価されます。
編集:
私はUserモデルを拡張し、提案のようなモデルのメソッドを追加しました。
class Profile(User):
def get_quizzes_passed_count(self):
return self.quiz_parent.filter(percent_correct__gte=0.8).count()
次に、私の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')
残念なことに私がこれを追加すると、これらは追加されたフレームワークには何も表示されません。助言がありますか?ありがとうございました。
'return self.quiz_parent.filter(percent_correct> 0.7).count()'は返される必要があります。self.quiz_parent.filter(percent_correct__gte = 0.7).count() ' – Fush
ありがとうございました! – YPCrumble
私はあなたの提案を適用しましたが、動作しませんでした。私の編集をチェックできますか?お手伝いありがとう! – Ryan113