Django User模型和Userprofile模型的形式相同

时间:2013-06-02 13:25:59

标签: django django-models django-forms

我正在使用他的Django用户模型的常见模式,同时通过Userprofile获得OneToOne关系以扩展用户。

我想有一个视图允许我在同一个表单上设置User字段和UserProfile字段。它应该将db事务应用于User和Userprofile表。

我很想使用ModelForm但是我无论如何也找不到我可以使用相同形式的两个模型。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

为您的用户个人资料创建模型表单,并为用户模型添加用户相关字段,例如first_namelast_name并在保存个人资料模型时保存用户字段:

class ProfileForm(forms.ModelForm):
    first_name = forms.CharField('First Name', max_length=25)
    last_name = forms.CharField('Last Name', max_length=25)

    def __init__(self, *args, **kwargs):
        super(ProfileForm, self).__init__(*args, **kwargs)

    class Meta:
        model = ProfileModel
        exclude = ('user', )

    def save(self, *args, **kwargs):
        instance = super(ProfileForm, self).save(*args, **kwargs)
        user = instance.user
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()
        return instance