ユーザーが自分のプロファイルを変更できるように「ユーザーのプロファイルを更新する」ページを作成したいので、次のモデルを考え出します。
class Profile(models.Model):
user = models.OneToOneField(User)
nick_name = models.CharField(blank=True,max_length=100)
school = models.CharField(blank=True,max_length=100)
motto = models.CharField(blank=True,max_length=100)
class ProfileForm(ModelForm):
class Meta:
model = Profile
そして私の見解は次のように設計されています:
@login_required
def update_profile_view(request):
if request.method == 'POST':
user = request.user
try:
profile = user.get_profile()
except Exception:
profile = Profile.objects.create(user=user)
form = ProfileForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
profile.nick_name = cd['nick_name']
profile.school = cd['school']
profile.motto = cd['motto']
profile.save()
return HttpResponseRedirect('/main_page/')
else:
form = ProfileForm()
return render(request, 'update_profile.html', {'form':form})
ユーザーとプロファイルの関係は明らかに 1 対 1 であり、要求があれば現在のユーザーを特定できます。したがって、フォームのユーザー フィールドに入力する必要はありません。残念ながら、これは「form.is_valid()」テストに合格できませんでした。また、「is_valid」が呼び出される前にフォームを変更するのは難しいようです。簡単にするために、私は独自のフォーム クラスを作成したくありません。また、カスタマイズされたフォーム検証も作成したくありません。問題を解決する他の方法はありますか?