提交时扩展的Django用户配置文件覆盖用户表数据



我有一个问题,当用户提交其配置文件更改时,关联的用户表的所有字段都覆盖了空白值(即:用户名,电子邮件,first_name ...etc)

我的网站有两种类型的用户具有完全不同的用户配置文件类型,因此,除非有人知道如何使该功能工作?

,我无法使用settings.py中的用户profiles设置。

在我的models.py中(简化,但要显示用户模型已继承):

class UserProfile(User):
    somevar = models.CharField(max_length=30)
    objects = UserManager()
class ProfileForm(ModelForm):
    class Meta:
        model = UserProfile
class UserForm(ModelForm):
    password2 = forms.CharField(widget=forms.PasswordInput())
    remail = forms.CharField(max_length=75)
    class Meta:
        model = UserProfile
        widgets = {'password': forms.PasswordInput()}
        fields = ('email', 'password')

在我的Views.py中:

@login_required
def profile_data(request):
    """
        enter user profile data
    """
    if request.method == 'POST':  # submission / data change
        user = UserProfile.objects.get(pk=request.user.id)
        form = ProfileForm(request.POST, instance=user)
        if form.is_valid():
            form.save()
        return render(request, 'users/profile_edit.html', {'form': form})
    else:  # no data entered = fill all users data in
        form = ProfileForm(initial=model_to_dict(UserProfile.objects.get(id=request.user.id)))
    return render(request, 'users/profile_edit.html', {'form': form})

问题是,如果表单有效,并且表单保存,则它会通过使所有值空白地影响该用户的用户表,因为它们这些属性在表单模型中不包含数据。我已经尝试将所有用户桌子排除在ProfileForm中,但似乎应该有一种更简单的方法。

有帮助吗?

这是按设计工作的。在多个表继承中,父母的属性可在子女中提供。保存时,子对象可以覆盖它们。

如果您想拥有不同类型的用户,这是有关此方法的最新问题,如何设置具有两个非常不同属性的用户

最新更新