MultiValueDictKeyError в Django при попытке изменить изображение профиля - PullRequest
1 голос
/ 18 июня 2020

Я понял. Я просто хочу изменить информацию профиля в этом запросе, я пытался изменить first_name и last_name. Вот мой views.py. Проверьте мой код и скажите, что не так. Мне нужно решение моей ошибки, я ничего не пробовал, потому что я не понимаю и не знаю django очень хорошо

И спасибо!

views.py

def profile(request):
    if request.method == 'POST':

        if not request.POST['first_name'] == '' and not request.POST['first_name'] == request.user.first_name:
            if not request.POST['last_name'] == '' and not request.POST['last_name'] == request.user.last_name:
                if not request.FILES['image'] == '':
                    User = request.user
                    User.first_name = request.POST['first_name']
                    User.last_name = request.POST['last_name']
                    User.save()
                    User.profile.image = request.FILES['image']
                    User.profile.save()
                    return redirect('profile')
                else:
                    User = request.user
                    User.first_name = request.POST['first_name']
                    User.last_name = request.POST['last_name']
                    User.save()
                    return redirect('profile')

            else:
                User = request.user
                User.first_name = request.POST['first_name']
                User.save()
                return redirect('profile')
        elif not request.POST['last_name'] == '' and not request.POST['last_name'] == request.user.last_name:
            if not request.POST['first_name'] == '' and not request.POST['first_name'] == request.user.first_name:
                if not request.FILES['image'] == '':
                    User = request.user
                    User.profile.image = request.FILES['image']
                    User.first_name = request.POST['first_name']
                    User.last_name = request.POST['last_name']
                    User.save()
                    User.profile.save()
                    return redirect('profile')
                else:
                    User = request.user
                    User.first_name = request.POST['first_name']
                    User.last_name = request.POST['last_name']
                    User.save()
                    return redirect('profile')

            else:
                User = request.user
                User.last_name = request.POST['last_name']
                User.save()
                return redirect('profile')
        elif not request.FILES['image'] == '':
            if not request.POST['last_name'] == '' and not request.POST['last_name'] == request.user.last_name:
                if not request.POST['first_name'] == '' and not request.POST['first_name'] == request.user.first_name:
                    User = request.user
                    User.profile.image = request.FILES['image']
                    User.first_name = request.POST['first_name']
                    User.last_name = request.POST['last_name']
                    User.save()
                    User.profile.save()
                    return redirect('profile')
                else:
                    User = request.user
                    User.profile.image = request.FILES['image']
                    User.profile.save()
                    User.last_name = request.POST['last_name']
                    User.save()
                    return redirect('profile')

            else:
                User = request.user
                User.profile.image = request.FILES['image']
                User.profile.save()
                return redirect('profile')
        else:
            return redirect('profile')
    else:
        return render(request, 'profile.html')

1 Ответ

0 голосов
/ 18 июня 2020

Чтобы проверить, содержит ли request.FILES ключ, вы выполняете не проверку с помощью:

if not <s>request.FILES['image'] == ''</s>:
    # &hellip;

Вы проверяете, находится ли элемент в QueryDict с помощью:

if <b>'image' in</b> request.FILES:
    # &hellip;

Обратите внимание, что для публикации файлов и данных в <form> enctype="&hellip;" должно быть установлено multipart/form-data:

<form method="post" <b>enctype="multipart/form-data"</b>>
    &hellip;
</form>

Кроме того, сделайте не так много ветки, вы можете создать представление, которое будет выглядеть так:

def profile(request):
    if request.method == 'POST':
        user = request.user
        if 'first_name' in request.POST:
            user.first_name = request.POST['first_name']
        if 'last_name' in request.POST:
            user.last_name = request.POST['last_name']
        if 'image' in request.FILES:
            profile = user.profile
            profile.image = request.FILES['image']
            profile.save()
        user.save()
        return redirect('profile')
    else:
        # &hellip;

Кроме того, вы можете использовать Form [Django -doc] или даже ModelForm [Django -doc] , чтобы сделать рендеринг формы, проверку ввода и обновление записи более удобным.

...