【问题标题】:Django User model and Userprofile model in the same formDjango User 模型和 Userprofile 模型在同一个表单中
【发布时间】:2013-06-02 13:25:59
【问题描述】:
我正在使用通用模式,即使用 Django 用户模型,同时通过 Userprofile 建立 OneToOne 关系来扩展用户。
我想要一个视图,它允许我在同一个表单上设置用户字段和用户配置文件字段。它应该将 db 事务应用于 User 和 Userprofile 表。
我很想使用 ModelForm,但无论如何我都没有发现我可以在同一个表单中使用两个模型。
我应该如何做到这一点?
【问题讨论】:
标签:
django
django-models
django-forms
【解决方案1】:
为您的用户配置文件创建模型表单并为用户模型添加用户相关字段,例如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