Здесь вы не возвращаете ошибки формы в шаблон.Я думаю, что вы можете подойти так (переопределив form_valid
вместо post
метода):
class ProfileSettings(UpdateView):
model = Profile
template_name = 'profile/settings.html'
form_class = ProfileForm
success_url = reverse_lazy('profile:settings')
def form_valid(self, form):
bio = form.cleaned_data['bio']
gender = form.cleaned_data['gender']
avatar = form.cleaned_data['avatar']
Profile.objects.update_or_create(user=self.request.user, defaults={'avatar':avatar, 'bio':bio, 'gender':gender})
return HttpResponseRedirect(self.success_url)
Кстати, у этого кода есть и недостатки.Мы не используем форму модели save
здесь.Было бы лучше, если бы мы могли это использовать.Первоначально form_valid
делает это.
Также в другой заметке, я думаю, что лучше всего использовать сигналов для создания профиля пользователя при каждом создании пользователя.Вот средний пост о том, как это сделать.Таким образом, вам даже не нужно переопределять form_valid
.
Обновление
Использование FormView для предварительного заполнения данных:
class ProfileSettings(FormView):
model = Profile
template_name = 'profile/settings.html'
form_class = ProfileForm
success_url = reverse_lazy('profile:settings')
def get_form_kwargs(self):
kwargs = super(ProfileSettings, self).get_form_kwargs()
kwargs['instance'] = self.request.user.profile # Profile object
return kwargs