Django, обновление профиля пользователя с помощью ModelForm - PullRequest
7 голосов
/ 01 декабря 2009

Я пытаюсь отобразить простую 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 ]

8 голосов
/ 01 декабря 2009

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

@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))
3 голосов
/ 01 декабря 2009

Вы также можете использовать универсальный вид :

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...