我有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。
答案 0 :(得分:1)
实现所需目标的最佳方法是创建一个自定义表单,声明两个模型所需的字段。通过访问save
中的字段,使用表单的cleaned_data
方法保存到各个模型类。
然后您的FormView将按预期工作。它将接收两个不同模型的输入,但逻辑完全包含在表单中。与所有自定义表单一样,将验证逻辑放在各种*clean*
方法中。