Ответ 1
Мне нужно переопределить метод get_object()
в представлении обновления и не нужно переопределять form_valid. Пользовательский get_object()
метод:
def get_object(self, queryset=None):
return self.request.user
Я пытаюсь обновить модель Django User с помощью 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 будет работать, но он не соответствует фактическим полям для получения имени пользователя при его доставке:
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)
Там может быть более простой способ сделать это, поэтому я открыт для предложений.