Я пытаюсь создать тест с несколькими вопросами, которые пользователь вводит в форму (также с тегом, но здесь дело не в этом). Я пробовал следующее, но я не считаю, что это правильный подход. Я думаю, что должен быть другой способ вместо ручного вызова Quiz.objects.create() с данными, полученными из формы. Кроме того, даже если объект викторины получает создан, я получаю следующее сообщение об ошибке:Добавить данные поля поля на основе ввода пользователем
'NoneType' object has no attribute '__dict__'
models.py
class Quiz(models.Model):
name = models.CharField(max_length=100)
number_of_questions = models.IntegerField(default=5)
time_limit = models.IntegerField(default=300)
questions = models.ManyToManyField(Question)
forms.py
class QuizForm(forms.ModelForm):
class Meta:
model = Quiz
exclude = ['questions']
def save(self):
data = self.cleaned_data
questions = get_questions_with_tag('example_tag')
questions = questions[:data['number_of_questions']]
quiz = Quiz.objects.create(name=data['name'],
time_limit=data['time_limit'],
number_of_questions=data['number_of_questions'])
for q in questions:
quiz.questions.add(q)
quiz.save()
просмотры .py
class AddQuizView(CreateView):
template_name = 'quiz/cpanel/add_quiz.html'
form_class = QuizForm
success_url = reverse_lazy('list_quizzes')
Можете ли вы предложить лучший подход, который включает только добавление списка вопросов в запрос формы?
Где находятся вопросы? Что такое 'get_questions_with_tag'? –
Это список объектов типа Вопрос. Я просто запрашиваю базу данных там: 'Question.objects.filter (tag__name = tag)' –