通过CreateView保存表单后如何进入另一页

问题描述 投票:1回答:1

添加新订单后,我将无法进入order_list页面。

[尝试同时使用reverse和reverse_lazy方法也只是将页面adres值直接设置为success_url = success_url ='orders / order_list'或成功URL ='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 %}

任何想法我在做什么错?

python django django-generic-views
1个回答
0
投票

尝试更改:

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。

© www.soinside.com 2019 - 2024. All rights reserved.