2

我遇到一个问题,当用户提交对其个人资料的更改时,关联的用户表的所有字段都被空白值覆盖(即:用户名、电子邮件、名字......等)

我的站点有两种类型的用户,它们的用户配置文件类型完全不同,因此我不能使用 settings.py 中的用户配置文件设置,除非有人知道如何使它工作?

在我的 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 中排除所有用户表字段,但似乎应该有更简单的方法。

有什么帮助吗?

4

1 回答 1

0

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

如果您想拥有不同类型的用户,这里是关于如何设置具有两种具有非常不同属性的用户类型的 Django 模型的最新问题

于 2012-10-22T04:47:35.150 回答