“QuerySet”对象没有属性“completed”

在我的测验应用程序中,每个用户都可以进行多次尝试。我的模型设置如下:


class Quiz(models.Model):

    title = models.CharField(max_length=15)

    slug = models.SlugField(blank=True)

    questions_count = models.IntegerField(default=0)


class Question(models.Model):

    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)

    label = models.CharField(max_length=1000)


class Choice(models.Model):

    question = models.ForeignKey(Question, on_delete=models.CASCADE)

    answer = models.CharField(max_length=100)

    is_correct = models.BooleanField('Correct answer', default=False)


class QuizTaker(models.Model):

    user = models.ForeignKey(User, on_delete=models.CASCADE)

    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)

    correct_answers = models.IntegerField(default=0)

    completed = models.BooleanField(default=False)

    attempt_number = models.PositiveIntegerField(default=0)

当我尝试确定给定的测验是否已完成时,我的序列化程序中出现错误:


class MyQuizListSerializer(serializers.ModelSerializer):

    questions_count = serializers.SerializerMethodField()

    completed = serializers.SerializerMethodField()

    progress = serializers.SerializerMethodField()

    score = serializers.SerializerMethodField()


    class Meta:

        model = Quiz

        fields = ['id', 'title', 'type_of_content', 'song', 'slug',

         'questions_count', 'completed', 'score', 'progress']

        read_only_fields = ['questions_count', 'completed', 'progress']


    def get_completed(self, obj):

        try:

            quiztaker = QuizTaker.objects.filter(user=self.context['request'].user, quiz=obj)

            for attempt in quiztaker:

                return quiztaker.completed   #the error comes from this line


        except QuizTaker.DoesNotExist:

            return None

谁能告诉我为什么我会收到此错误?我正在过滤,因为用户可以进行多次尝试,因此我得到一个查询集,因此我必须循环遍历它。该QuizTaker模型确实有一个completed字段,那么问题是什么?


凤凰求蛊
浏览 79回答 1
1回答

绝地无双

简单的错误,该quiztaker对象是一个QuerySet.您应该使用循环attempt中分配的变量for:for attempt in quiztaker:    return attempt.completed   #the error comes from this line
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python