python - 如何通过CreateView保存表单后转到另一个页面

标签 python django django-generic-views

添加新订单后我不想进入 order_list 页面。

尝试使用反向和反向惰性方法也只是直接将页面地址值设置为 success_url,如 success_url = 'orders/order_list' 或 sucess url = 'order_list' 但它总是返回 Http 405 错误。

View .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']

url.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 %}

有什么想法我做错了什么吗?

最佳答案

更改:

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模板标签。

关于python - 如何通过CreateView保存表单后转到另一个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58254502/

相关文章:

python - 创建一个字符串,其参数取决于 Python 中的列表值

python - Google Cloud SQL w/Django - 连接速度极慢

python - 调用序列化器的 post 方法并向其传递数据

python - 'NoneType' 对象没有属性 'split' : Django 1. 11

django - 如何使用 django 模板语言以一对多关系访问另一个表的属性?

python - 在 django urls.py 中访问请求对象

Django 通用 View UpdateView 重定向 URL 与更新的 slug

python - np.around 用于没有值和整数值的数组

python - 如何将 SteamAPI 与 Django 一起使用?

django - 如何使用通用 View 在 View 中设置模型的字段?