我正在使用他的Django用户模型的常见模式,同时通过Userprofile获得OneToOne关系以扩展用户。
我想有一个视图允许我在同一个表单上设置User字段和UserProfile字段。它应该将db事务应用于User和Userprofile表。
我很想使用ModelForm但是我无论如何也找不到我可以使用相同形式的两个模型。
我该如何做到这一点?
答案 0 :(得分:2)
为您的用户个人资料创建模型表单,并为用户模型添加用户相关字段,例如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