Я понимаю это конкретное сообщение об ошибке
Объект '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)
EDIT
Это другой вид, где я собираюсь изменить список:
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 и отображается идентификатор следующего вопроса. Мое намерение состоит в том, чтобы отслеживать текущий вопрос, ведя список вопросов на сессии.
Я был бы очень признателен, если бы я объяснил, что я делаю неправильно, и правильный способ сделать это.