我遇到的问题是,当用户提交对其个人资料的更改时,关联的用户表会将所有字段都覆盖为空白值(即:用户名,电子邮件,first_name等)
我的网站有两种类型的用户具有完全不同的用户配置文件类型,因此我无法使用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中排除所有用户表字段,但似乎应该有一种更简单的方法。
任何帮助?
答案 0 :(得分:0)
这是按设计工作的。在multiple table inheritance中,父级的属性在子级中可用。保存时,子对象可以覆盖它们。
如果您想拥有不同类型的用户,请参阅最近有关此How to set up Django models with two types of users with very different attributes
的问题