我正在使用使用 Django User 模型的常见模式,同时通过 Userprofile 建立 OneToOne 关系来扩展用户。
我想要一个视图,它允许我在同一个表单上设置用户字段和用户配置文件字段。它应该将 db 事务应用于 User 和 Userprofile 表。
我很想使用 ModelForm 但无论如何我都没有发现我可以以相同的形式使用两个模型。
我应该如何做到这一点?
我正在使用使用 Django User 模型的常见模式,同时通过 Userprofile 建立 OneToOne 关系来扩展用户。
我想要一个视图,它允许我在同一个表单上设置用户字段和用户配置文件字段。它应该将 db 事务应用于 User 和 Userprofile 表。
我很想使用 ModelForm 但无论如何我都没有发现我可以以相同的形式使用两个模型。
我应该如何做到这一点?
为您的用户配置文件创建一个模型表单并为用户模型添加用户相关字段,例如first_name
,last_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