Djangoユーザーモデルを、現在のユーザーで自動的にレンダリングするクラスベースのUpdateViewで更新しようとしていますが、pkまたはslugが必要であるというエラーが発生します。フォームは機能し、現在のユーザーコンテキストは適切ですが、変更を送信しようとするとエラーがスローされます。使用しているビューは次のとおりです。
class UserUpdateView(UpdateView):
form_class = UserForm
model = User
template_name = 'members/user_update.html'
def get(self, request, **kwargs):
self.object = User.objects.get(username=self.request.user)
form_class = self.get_form_class()
form = self.get_form(form_class)
context = self.get_context_data(object=self.object, form=form)
return self.render_to_response(context)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())
更新ビューでget_object()
メソッドをオーバーライドする必要があり、form_validをオーバーライドする必要はありません。カスタムのget_object()
メソッドは次のとおりです。
def get_object(self, queryset=None):
return self.request.user
私はこれが古い投稿であることを知っていますが、何かが私に際立っていました、そしてこのコメントは新参者のための情報です。
Self.objectのget呼び出しは機能しますが、ユーザーインスタンスを提供しているため、ユーザー名を取得するための実際のフィールドと一致しません。
self.object = User.objects.get(username=self.request.user)
ユーザー名引数をインスタンスのユーザー名引数と一致させる必要があります。
self.object = User.objects.get(username=self.request.user.username)
さらに、pk(id)を使用します。
self.object = User.objects.get(pk=self.request.user.pk)
これを行うためのより良い方法があるかもしれないので、私は提案を受け入れます。