更改modelForm保存的模型,正在保存

时间:2014-05-12 08:35:49

标签: python django forms django-models

假设我有一个父类MyUser的modelForm,它保存用户的公共信息。

用户有一个名为role的字段,表示他们所处的角色,我有3个特殊模型,其中有3个角色。

我想要做的是在保存表单时检查表单的角色字段。如果它是这3个特殊角色中的一个,我想保存特殊模型(MyUser的子节点)而不是MyUser ,否则,我希望save方法正常执行。(保存实际的MyAbstractUser)。

class MyUserForm(forms.ModelForm):


    retyped_pass = forms.CharField(label='Password Confirmation', widget=forms.PasswordInput, max_length=30, required=True)
    class Meta:
        model = MyUser

    def save(self, ?):
        if self.fields['role'] == 'researcher'
             save ResearcherUser instead of MyUser
        ....
        else: # if none of above
             save MyUser

特殊用户类型是ResearcherUser,ProducerUser和CenterUser,如果角色不是这三个,我希望它是一个MyUser。

知道我怎么能实现这个目标? 在此先感谢:)

1 个答案:

答案 0 :(得分:1)

假设MyUser的模型表单中的字段与特殊用户类型的字段完全相似,您可以执行以下操作

def save(self, *args, **kwargs):
        if self.fields['role'] == 'researcher'
             return ResearchUser.objects.get_or_create( **self.fields)
        ....
        else: # if none of above
             super(MyUserForm, self).save(*args, **kwargs)

注意:您可能希望使用比.get_or_create()更好的内容,它会在所提供的所有字段中查找现有对象。但它可能找不到并试图创造新的。

请参阅the docs了解具体行为。