2014-10-08 92 views
1

我正在尝试创建一个测验,其中包含用户在表单中输入的一系列问题(也包含标记,但这不是重点)。我试过以下,但我不认为这是正确的做法。我认为必须有另一种方式,而不是手动调用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') 

你能否提出一种更好的方法,只涉及将问题列表添加到表单请求中?

+0

问题来自哪里?什么是'get_questions_with_tag'? – 2014-10-08 14:20:47

+0

这是一个Question类型的对象列表。我只是在那里查询数据库:'Question.objects.filter(tag__name = tag)' – 2014-10-08 15:37:40

回答

0

几个尝试后,我想出了这个:

def save(self): 
    data = self.cleaned_data 

    questions = get_questions_with_tag('example_tag') 
    questions = questions[:data['number_of_questions']] 

    self.instance.save() 
    self.instance.questions = questions 

    quiz.save() 

它修复了我的错误,还我不再手动创建类型测验的对象。

相关问题