Django оформить заказ недоступно: страница не найдена (404) - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь разработать сайт электронной коммерции с Django. Таким образом, я нахожусь в этой точке, когда пользователи могут добавлять товары в свою корзину, но когда я пытаюсь перейти к оформлению заказа, по какой-то причине моя форма оформления заказа не отображается, скорее, она говорит:

Страница не найдена (404)

Я удостоверился, что зарегистрировал свои модели и провел миграцию.

В чем проблема?

Мои views.py :

@login_required
def checkout(request):
    address_form = UserAddressForm(request.POST or None)
    if address_form.is_valid():
        new_address = address_form.save(commit= False)
        new_address.user = request.user
        new_address.save()
    else:
        raise Http404
        print(form.errors)
    context = {"address_form": address_form}
    template = "orders/checkout.html"
    return render(request, template, context)

Мой заказ. html:

<form method="POST" action=''>
    {% csrf_token %}
    <fieldset class="form-group">   
        {{ address_form|crispy }}
    </fieldset>
    <div class="form-group">
        <input type="submit" class="btn btn-outline-dark" value="Place Order"/>
    </div>
</form>

Мой urls.py:

from orders import views as orders_views
path('checkout/', orders_views.checkout, name='checkout'),

1 Ответ

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

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

Ваш код обновлен:

@login_required
def checkout(request):
    if request.method == 'POST':
        address_form = UserAddressForm(request.POST)
        if address_form.is_valid():
            new_address = address_form.save(commit= False)
            new_address.user = request.user
            new_address.save()
            return # TODO : return what?
    else:
        # otherwise (if GET request) we get here
        address_form = UserAddressForm()

    context = {"address_form": address_form}
    return render(request, "orders/checkout.html", context)

И вам необходимо указать, что должно происходить, когда форма действительна: редирект например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...