Django UpdateView for Profile 模型,其中还包括一个用户表单



使用 Django 2.x,我有一个配置文件模型,我想更新配置文件的 UpdateView 中的一些用户字段,例如 User.email

我可以显示电子邮件字段并显示当前值,但我不知道如何更新它。

这是我的设置:

models.py:

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# other fields

forms.py:

class UserForm(forms.ModelForm):
class Meta:
model=User
fields=('email')
class ProfileForm(forms.ModelForm):
class Meta:
model=Profile
fields=(...)

views.py

class ProfileUpdate(UpdateView):
model=Profile
form_class = ProfileForm
user_form_class = UserForm

def get_context_data(self, **kwargs):
...
user = get_object_or_404(Profile, pk=self.kwargs.get('pk')).user
context['user_form']= self.user_form_class(instance=user)

到目前为止,一切似乎都有效。 用户表单有效,当前电子邮件地址显示在表单中。 但是,这就是我卡住的地方,我不知道如何保存该电子邮件地址。

仍然在配置文件更新中,这就是我正在尝试的:

def post(self, request, *args, **kwargs):
user_form = self.user_form_class(request.POST)
if user_form.is_valid():
user_form.save()
# code makes it this far when submitting form.
return super(ProfileUpdate, self).post(self, request, *args, **kwargs)

尽管运行代码,但仅更新配置文件模型,用户模型不会获取更新的电子邮件地址。

试一试django-shapeshifter: https://github.com/kennethlove/django-shapeshifter

pip install django-shapeshifter

自述文件中的示例正是您要查找的。完全披露,我是该项目的贡献者。

祝你好运!

最新更新