Yes, this is finally what I was looking for. Thanks for your answer and time spend on this.
Here is final version:
Form:
class ProfileUpdateForm(forms.ModelForm):
first_name = forms.CharField(max_length=32)
last_name = forms.CharField(max_length=32)
class Meta:
model = UserProfile
fields = ['picture']
View:
class UserSettings(LoginRequiredMixin, UpdateView):
template_name = 'users/settings.html'
context_object_name = 'user'
queryset = UserProfile.objects.all()
form_class = ProfileUpdateForm
def get_context_data(self, **kwargs):
context = super(UserSettings, self).get_context_data(**kwargs)
user = self.request.user
context['profile_form'] = ProfileUpdateForm(instance=self.request.user.userprofile, initial={'first_name': user.first_name, 'last_name': user.last_name})
return context
def form_valid(self, form):
profile = form.save(commit=False)
user = profile.user
user.last_name = form.cleaned_data['last_name']
user.first_name = form.cleaned_data['first_name']
user.save()
profile.save()
return HttpResponseRedirect(reverse('users:user-profile', kwargs={'pk': self.get_object().id}))