Как перейти на другую страницу после сохранения формы с помощью CreateView - PullRequest
1 голос
/ 06 октября 2019

Я не хочу попасть на страницу order_list после добавления нового заказа.

Пытался использовать метод reverse и reverse_lazy, а также просто установить для адреса страницы значение success_url, например, success_url = 'orders / order_list' или sucessurl = 'order_list', но он всегда возвращает мне ошибку Http 405.

views.py

django.shortcuts import render
from django.urls import reverse_lazy
from django.views import View
from django.views.generic import ListView, DetailView, CreateView
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin
from .models import Order
from .forms import CreateOrder
from django.contrib.auth.decorators import login_required



# Create your views here.

class OrderCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):

        login_url = '/login_required'
        permission_required = 'orders.add-order'
        model = Order
        success_url = reverse_lazy('orders:order_list')

        fields = ['airport', 'direction', 'adress', 'client', 'telephone', 'flight_number', 'plane', 'pick_up', 'gate', 'driver']

urls.py

from django.contrib import admin
from django.urls import path
from django.contrib.auth import views as auth_views


from orders.views import OrderCreateView, OrderListView, AboutView, LoginRequiredView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('add_order/', OrderCreateView.as_view(template_name="orders/add_order.html"), name="add_order"),
    path('order_list/', OrderListView.as_view(), name="order_list"),
    path('login/', auth_views.LoginView.as_view(template_name="pages/login.html"), name="login"),
    path('logout/', auth_views.LogoutView.as_view(template_name="pages/logout.html"), name="logout"),
    path('about/', AboutView.as_view(), name="about"),
    path('login_required/', LoginRequiredView.as_view(), name='login_required')

]

add_order.html

{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}


{% block content %}
    <div class="container" style="width: 40%; height: 80%;">


            <div class="page header">
                <h1>Add new order</h1>
            </div>
            <form action="/order_list/" method="post">
                {% csrf_token %}
                {{ form|crispy }}
                <button type="submit" class="btn btn-success">Save order</button>
            </form>
        </div>


{% endblock %}

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 06 октября 2019

Изменить:

success_url = reverse_lazy('orders:order_list')

К:

success_url = reverse_lazy('order_list')

И изменить:

<form action="/order_list/" method="post">

К:

<form action="/add_order/" method="post">

Примечание : Вы используете жестко закодированный URL, который не рекомендуется. Используйте тег шаблона url .

...