Django, обновление профиля пользователя с помощью ModelForm

Я пытаюсь отобразить простой ModelForm для профиля пользователя и разрешить пользователю его обновлять. Проблема здесь в том, что моя логика как-то испорчена, и после успешного вызова form.save () старые значения отображаются на странице. Пока не будет показано, что отображается соответствующее значение. Что здесь не так?

@login_required def user_profile(request): success = False user = User.objects.get(pk=request.user.id) upform = UserProfileForm(instance=user.get_profile()) if request.method == 'POST': userprofile = UserProfileForm(request.POST, instance=user.get_profile()) if userprofile.is_valid(): up = userprofile.save(commit=False) up.user = request.user up.save() success = True return render_to_response('profile/index.html', locals(), context_instance=RequestContext(request)) 

Я просто хочу обновить существующий профиль, а не добавлять новый.

2 Solutions collect form web for “Django, обновление профиля пользователя с помощью ModelForm”

Попробуй это:

 @login_required def user_profile(request): success = False user = User.objects.get(pk=request.user.id) if request.method == 'POST': upform = UserProfileForm(request.POST, instance=user.get_profile()) if upform.is_valid(): up = upform.save(commit=False) up.user = request.user up.save() success = True else: upform = UserProfileForm(instance=user.get_profile()) return render_to_response('profile/index.html', locals(), context_instance=RequestContext(request)) 

Вы также можете использовать общий вид :

 from django.views.generic.create_update import update_object @login_required def user_profile(request): return update_object(request, form_class=UserProfileForm, object_id=request.user.get_profile().id, template_name='profile/index.html') 
Python - лучший язык программирования в мире.