ユーザーがプロファイルに変更を送信すると、関連するユーザー テーブルのすべてのフィールドが空白の値で上書きされるという問題があります (つまり、ユーザー名、電子メール、first_name など)。
私のサイトには、ユーザー プロファイル タイプがまったく異なる 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 からすべてのユーザー テーブル フィールドを除外しようとしましたが、もっと簡単な方法があるはずです。
何か助けはありますか?