我了解这条错误消息
“ QuerySet”对象没有属性“ _meta”
在StackOverflow上已经进行了很多讨论,我经历了很多提供的答案,但是每个答案都是唯一的,不能解决我的问题。
因此,我有一个已过滤模型对象的列表,该列表是从数据库中获取的:
questions_by_category = Question.objects.filter(category=category_id)
我想将此列表保存在会话中,如下所示:
request.session["questions"] = json.dumps(model_to_dict(questions_by_category))
但是我从以下这一行得到了错误消息:
model_to_dict(questions_by_category)
这是模型类:
class Question(models.Model):
question_text = models.CharField(max_length=200)
correct_answer = models.CharField(max_length=20)
publication_date = models.DateTimeField('date_published', default=django
.utils.timezone.now)
question_hint = models.CharField(max_length=200, default='hint')
question_thumbnail = models.ImageField(upload_to='gallery', height_field=None, width_field=None,
max_length=100,
default='images/pyramid.jpg')
category = models.ForeignKey(QuestionCategory, on_delete=models.SET_NULL, null=True)
difficulty_level = models.IntegerField(default=10)
def was_published_recently(self):
return self.publication_date >= timezone.now() - datetime.timedelta(days=1)
class Meta:
db_table = 'question'
def __str__(self):
return self.question_text
def serialize(self):
return self.__dict__
视图:
def question(request, category_name, category_id):
questions_by_category = Question.objects.filter(category=category_id)
current_question = questions_by_category.iterator().__next__()
choice = current_question.choice_set.get()
form = ChoiceForm(request.POST)
request.session["questions"] = json.dumps(model_to_dict(questions_by_category))
context = {
'question': current_question, 'choice': choice, 'form': form
}
return render(request, 'quiz/question.html', context)
编辑
这是我打算修改列表的另一个视图:
def accept_choice(request):
global data
if request.method == 'POST':
data = request.POST.get('choiceRadioGroup')
print('Selected data: ' + str(data))
return render(request, 'quiz/question.html', {'data': 'data'}
这里的目标(开始显得凌乱)是从问题视图中选择接受选择,单击下一步,调用accept_choice,并显示下一个问题ID。我的意图是通过维护会话中的问题列表来跟踪当前问题。
对于我做错了什么以及正确的解决方法,我将非常感激。
答案 0 :(得分:0)
Daniel Roseman在评论中已经指出:
顾名思义,model_to_dict需要一个模型,而不是查询集。
如果要将模型实例转换为dict
,则可以使用instance.__dict__
。
但是,对于整个QuerySet,您可以通过一个简单的循环获取字典列表:
questions_by_category = [question.__dict__ for question in questions_by_category]
尽管我不确定您是否可以对输出进行JSON序列化,还是将整个内容保存到会话中是个好主意。