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

如何解决“ 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','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字段,那么问题是什么?

这是完整的追溯:

Traceback (most recent call last):
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\django\core\handlers\exception.py",line 34,in inner
    response = get_response(request)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\django\core\handlers\base.py",line 115,in _get_response
    response = self.process_exception_by_middleware(e,request)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\django\core\handlers\base.py",line 113,in _get_response
    response = wrapped_callback(request,*callback_args,**callback_kwargs)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\django\views\decorators\csrf.py",line 54,in wrapped_view
    return view_func(*args,**kwargs)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\django\views\generic\base.py",line 71,in view
    return self.dispatch(request,*args,**kwargs)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\views.py",line 505,in dispatch
    response = self.handle_exception(exc)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\views.py",line 465,in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\views.py",line 476,in raise_uncaught_exception
    raise exc
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\views.py",line 502,in dispatch
    response = handler(request,**kwargs)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\generics.py",line 199,in get
    return self.list(request,**kwargs)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\mixins.py",line 46,in list
    return Response(serializer.data)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\serializers.py",line 760,in data
    ret = super().data
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\serializers.py",line 260,in data
    self._data = self.to_representation(self.instance)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\serializers.py",line 677,in to_representation
    return [
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\serializers.py",line 678,in <listcomp>
    self.child.to_representation(item) for item in iterable
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\serializers.py",line 529,in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "C:\Users\mvren\miniconda3\envs\myRuEnv\lib\site-packages\rest_framework\fields.py",line 1905,in to_representation
    return method(value)
  File "C:\Users\mvren\OneDrive\Documents\Coding\Russki\mysite\quizzes\serializers.py",line 48,in get_completed
    return quiztaker.completed

Exception Type: AttributeError at /quizzes/api/my-quizzes/Melissavr
Exception Value: 'QuerySet' object has no attribute 'completed'

解决方法

一个简单的错误,quiztaker对象是一个QuerySet

您应该使用attempt循环中分配的for变量:

for attempt in quiztaker:
    return attempt.completed   #the error comes from this line

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?