[使用表单,我试图在首先获取我要添加的问题的查询集之后,将项目添加到questions
对象的manytomany字段Quiz
中。我保存了ModelForm,但是当我添加项目时,出现AttributError:'function' object has no attribute 'questions'
以前,我能够在模型中使用保存方法来create a Quiz object with 3 random questions。但是,我看不到仅使用模型从特定查询集中添加3个问题的方法]
views.py
def choose(request, obj_id): """Get the id of the LearnObject of interest""" """Filter the questions and pick 3 random Qs""" my_qs = Question.objects.filter(learnobject_id=obj_id) my_qs = my_qs.order_by('?')[0:3] if request.method == 'POST': form = QuizForm(request.POST) if form.is_valid(): new_quiz = form.save for item in my_qs: new_quiz.questions.add(item) new_quiz.save() return HttpResponseRedirect('/quizlet/quiz-list') else: form = QuizForm() return render(request, 'quizlet/quiz_form.html', {'form': form})
和models.py
class LearnObject(models.Model): """model for the learning objective""" code = models.CharField(max_length=12) desc = models.TextField() class Question(models.Model): """model for the questions.""" name = models.CharField(max_length=12) learnobject = models.ForeignKey( LearnObject, on_delete=models.CASCADE, ) q_text = models.TextField() answer = models.CharField(max_length=12) class Quiz(models.Model): """quiz which will have three questions.""" name = models.CharField(max_length=12) questions = models.ManyToManyField(Question) completed = models.DateTimeField(auto_now_add=True) my_answer = models.CharField(max_length=12) class QuizForm(ModelForm): """test out form for many2many""" class Meta: model = Quiz fields = ['name', 'my_answer']
错误发生在
new_quiz.questions.add(item)
行。我不明白这一点,因为Quiz
的模型具有字段questions
,并且对象(我认为)已经在第一个new_quiz = form.save()
]上创建了>
[使用表格,我首先要获取要添加的问题的查询集后,尝试将项目添加到Quiz对象的许多领域问题中。我保存了ModelForm,但是当我添加项目时,我...
错误在下一行:new_quiz = form.save
,您缺少()
,请将其更改为new_quiz = form.save()
。
如果不是,则将函数form.save
的引用保存到new_quiz
,而不是函数返回的对象。