'Представление dashboard.views.index не возвращало объект HttpResponse. Вместо этого он вернул None. при использовании POST-запроса указанной переменной c - PullRequest
0 голосов
/ 26 апреля 2020

Поэтому я пытаюсь создать простое представление, которое позволяет пользователю изменять свой аватар с помощью отправки формы. Визуализация представления перед запросом POST работает нормально, однако, когда пользователь отправляет новый файл изображения через отправку формы, я получаю следующую ошибку:

Value Error at /
The view dashboard.views.index didn't return an HttpResponse object. It returned None instead.

Ниже приведен фрагмент из моего view.py

@login_required(login_url='/accounts/login/')
def index(request):
    if request.method == 'POST':
        if 'imagefile' in request.POST:
            form = forms.AvatarUpdate(request.POST, request.FILES)
            if form.is_valid():
                image = request.FILES['image']
                request.user.avatar = image
                request.user.save()
                return redirect('/')
    else:
        form = forms.AvatarUpdate()
        return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})

Хотя forms.py выглядит следующим образом:

class AvatarUpdate(forms.Form):
    imagefile = forms.ImageField(widget=forms.FileInput(attrs={'name': "imagefile"}), label="Change user avatar")

Я хочу сказать, что модель будет сохранена только в том случае, если запрос POST содержит переменную imagefile. Как мне go решить проблему?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Хорошо, я сделал эту работу, кажется, имя переменной ввода является частью request.FILES, а не request.POST. В общем, view.py будет выглядеть так:

@login_required(login_url='/accounts/login/')
def index(request):
    form = forms.AvatarUpdate()
    if request.method == 'POST':
        form = forms.AvatarUpdate(request.POST, request.FILES)
        if 'imagefile' in request.FILES:
            if form.is_valid():
                image = request.FILES['imagefile']
                request.user.avatar = image
                request.user.save()
                return redirect('/')
    else:
        return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})

Спасибо за попытку помочь

0 голосов
/ 26 апреля 2020

Не все ваши операторы if возвращают HttpResponse. Если вы хотите сохранить ту же логику c, вам нужно поместить else с HttpResponse, и вы не можете просто поместить последний возврат вне оператора else, потому что ваша переменная формы не будет распознана.

def index(request):
    if request.method == 'POST':
        if 'imagefile' in request.POST:
            form = forms.AvatarUpdate(request.POST, request.FILES)
            if form.is_valid():
                image = request.FILES['image']
                request.user.avatar = image
                request.user.save()
                return redirect('/')
            else:
                return render(...)
        else:
            return render(...)
    else:
        form = forms.AvatarUpdate()
        return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})

Или вы можете определить значение формы по умолчанию:

def index(request):
    form = None
    if request.method == 'POST':
        if 'imagefile' in request.POST:
            form = forms.AvatarUpdate(request.POST, request.FILES)
            if form.is_valid():
                image = request.FILES['image']
                request.user.avatar = image
                request.user.save()
                return redirect('/')
    else:
        form = forms.AvatarUpdate()

    return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...