如何解决“ 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 举报,一经查实,本站将立刻删除。