Не возвращает объект HttpResponse. Вместо этого он вернул None - Django

-1

Я получаю сообщение об ошибке с представлением, которое у меня есть, и мне было интересно, сможет ли кто-нибудь помочь мне выяснить, откуда он. Я уверен, что это что-то маленькое, что я не вижу, откуда он...

В представлении будет отображаться форма, которая будет отображаться для пользователя для ввода информации, после отправки формы она обрабатывается, а затем перенаправляется к домашнему пользователю...

Вот ошибка:

ValueError at /transfer/
The view tab.views.transfers didn't return an HttpResponse object. It returned None instead.
Request Method: POST
Request URL:    http://localhost:8000/transfer/
Django Version: 1.8.6
Exception Type: ValueError
Exception Value:    
The view tab.views.transfers didn't return an HttpResponse object. It returned None instead.

Вот view.py

def transfers(request):
    if 'username' not in request.session:
        return redirect('login')
    else:
        username = request.session['username']
        currentUser = User.objects.get(username = username)
        if request.method == 'POST':
            form = TransferForm(request.POST)
            if form.is_valid():
                cd = form.cleaned_data
                from_acct = cd['from_acct']
                to_acct = cd['to_acct']
                amount = cd['amount']
                memo = cd['memo']
                new_transfer = Transfers.objects.create(
                    user = currentUser,
                    from_acct = from_acct,
                    to_acct = to_acct,
                    amount = amount,
                    memo = memo,
                    frequency = 1,
                    status = 1,
                )
                return redirect('home_page')
        else:
            form = TransferForm()
            form.fields['from_acct'].queryset = Accounts.objects.filter(user = currentUser).all()
            message = 'please fill out the below form'
            parameters = {
                'form':form,
                'currentUser':currentUser,
                'message':message,
            }
            return render(request, 'tabs/user_balance.html', parameters)

Вот html файл:

{% extends "base.html" %}

{% block content %}
  <h1>Transfer Money</h1>
  {% if message %}
    <p>{{message}}</p>
  {% endif %}
  <form action="." method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" name="submit" value="submit">
  </form>
{% endblock %}

Вот часть файла forms.py

class TransferForm(forms.ModelForm):
    acct_choices = (('tabz', 'Tabz - Username'),
                    ('Wells Fargo', 'Wells Fargo - Username'))
    from_acct = forms.TypedChoiceField(
        choices=acct_choices, widget=forms.RadioSelect, coerce=int
    )
    to_acct = forms.TypedChoiceField(
        choices=acct_choices, widget=forms.RadioSelect, coerce=int
    )
    class Meta:
        model = Transfers
        fields = ['from_acct', 'to_acct', 'amount', 'memo']
        labels = {
            'from_acct':'from',
            'to_acct':'to',
        }
  • 0
    вместо этого используйте HttpResponseRedirect
Теги:
django-views

2 ответа

1
Лучший ответ
    from django.http import HttpResponse, HttpResponseRedirect
    if request.method == 'POST':
        form = TransferForm(request.POST)
        if form.is_valid():
            ...
            return HttpResponseRedirect(reverse_lazy('home'))
        else:
            form.fields['from_acct'].queryset = Accounts.objects.filter(user = currentUser).all()
            message = 'please fill out the below form'
            parameters = {
            'form':form,
            'currentUser':currentUser,
            'message':message,
            }
            return render(request, 'tabs/user_balance.html', parameters)

html add form.errors

{% extends "base.html" %}

{% block content %}
  <h1>Transfer Money</h1>
  {% if message %}
    <p>{{message}}</p>
  {% endif %}
  <form action='your_url/' method="POST">
    {% csrf_token %}
    {{ field.errors }}
    {{ form.as_p }}
    <input type="submit" name="submit" value="submit">
  </form>
{% endblock %}
  • 0
    с ошибками формы ответа http я получаю это на экране ... это означает, что проблема с этими двумя полями from_acctto_acct - я собираюсь обновить вопрос с частью forms.py
  • 0
    не понимаю, опубликовать журнал может помочь
Показать ещё 9 комментариев
1

Ну, эта ошибка должна быть выбрана просто потому, что вы даете недопустимую форму вашему представлению. Если вы посмотрите на логику представления, если это POST и форма недействительна, представление ничего не возвращает... ну нет для python. Это ошибка, которую вы получаете? Попробуйте поставить оператор else с возвратом после return redirect('home_page') и посмотреть, исправляет ли эта часть эту часть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню