Django:是否可以在一个通用视图中验证和保存多个表单的字段?

时间:2011-05-21 06:52:48

标签: django django-models django-forms

我有2个型号:

class Person( models.Model ):
  username = models.CharField
  name = models.CharField( max_length = 30 )
  surname = models.CharFields( max_length = 30 )
  ...

class PersonSkills( models.Model ):
  person = models.ForeignKey( Person )
  skill = models.CharField( max_length = 30 )
  ...

我想在一个视图中向Person和PersonSkills添加数据。

现在我有了RegisterView,就像下一个:

class RegisterForm( ModelForm ):
    class Meta:
        model = Person
        fields = ( 'username', 'name', 'surname', 'password', )

class RegisterView( FormView ):
    form_class = RegisterForm
    success_url = "/welcome/"
    template_name = "register.tmpl"
    is_valid = True
    def form_valid( self, form ):       
        form.save()
        self.is_valid = True
        return super( RegisterView, self ).form_valid( form )
    def form_invalid( self, form ):
        self.is_valid = False       
        return super( RegisterView, self).form_invalid( form )
    ...

那么如何在一个视图中向Person和PersonSkills添加数据呢?从FormView继承只允许一个form_class。

1 个答案:

答案 0 :(得分:1)

实现所需目标的最佳方法是创建一个自定义表单,声明两个模型所需的字段。通过访问save中的字段,使用表单的cleaned_data方法保存到各个模型类。

然后您的FormView将按预期工作。它将接收两个不同模型的输入,但逻辑完全包含在表单中。与所有自定义表单一样,将验证逻辑放在各种*clean*方法中。