首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoReverseMatch at /purchase_form/ Reverse 'purchase_form‘找不到。'purchase_form‘不是一个有效的视图函数或模式名称

NoReverseMatch at /purchase_form/ Reverse 'purchase_form‘找不到。'purchase_form‘不是一个有效的视图函数或模式名称
EN

Stack Overflow用户
提问于 2021-02-24 15:32:56
回答 1查看 257关注 0票数 0
代码语言:javascript
复制
#models.py

from django.db import models
from django.utils import timezone
from django.urls import reverse,reverse_lazy,resolve
# Create your models here.

class Purchase(models.Model):
    purchase_date = models.DateField()
    components = models.ForeignKey(Components,on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()
    remarks = models.TextField(max_length=500,blank=True,null=True)

    def __str__(self):
        return str(self.pk)

#views.py
from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic import (View, ListView, DetailView, CreateView, UpdateView, DeleteView)
from myinventory.models import Purchase
# Create your views here.

class PurchaseCreateView(CreateView):
    model = Purchase
    fields = '__all__'
    success_url = reverse_lazy("purchase_form")

def get_context_data(self,**kwargs):
    context = super().get_context_data(**kwargs)
    context['purchases'] = Purchase.objects.all()
    return context

project urls.py
from django.contrib import admin
from django.urls import path,include

urlpatterns = [

    path('admin/', admin.site.urls),
    path('',include('myinventory.urls','myinventory')),

]

代码语言:javascript
复制
app urls.py
from django.urls import path,reverse_lazy
from django.views.generic import CreateView
from myinventory import views


app_name = 'myinventory'

urlpatterns = [
        path('purchase_form/', views.PurchaseCreateView.as_view(),name="purchase_form"),
]


purchase_form.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Purchase</title>
  </head>
  <body>
    <form method="post">
      {% csrf_token %}
      {{ form.as_p }}
      <input type="submit" value="Submit">

      {% for purchase in purchases %}
      <h2>{{ purchase.purchase_date }}</h2>
      <h2>{{ purchase.components }}</h2>
      <h2>{{ purchase.quantity }}</h2>
      <h2>{{ purchase.remarks }}</h2>
      {% endfor %}
    </form>
  </body>
</html>

admin.py
from django.contrib import admin
from myinventory.models import *


# Register your models here.


admin.site.register(Purchase)

Traceback

I'm getting following error:
Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/purchase_form/

Django Version: 3.1.7
Python Version: 3.9.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'myinventory']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):

文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\core\handlers\exception.py",第47行,在内部响应=get_response(请求)文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\core\handlers\base.py",行181中,在_get_response response = wrapped_callback(request,*callback_args )中)文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\views\generic\base.py",第70行,在调度返回处理程序(请求,*args,*args)中,查看返回self.dispatch(请求、*args、**kwargs)文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\views\generic\base.py",第98行。**kwargs)文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\views\generic\edit.py",行172,在post返回超级().post(请求,*args,**kwargs)文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\views\generic\edit.py",第142行,在post返回"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\views\generic\edit.py",(表单)self.form_valid文件第126行,在form_valid返回超级().form_valid(表单)文件第57行,在"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\views\generic\edit.py",返回HttpResponseRedirect(self.get_success_url())文件HttpResponseRedirect行11m2,在get_success_url if self.success_url: File self.success_url第135行,在包装器 res = func(*self.__args,文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\urls\base.py",第87行,反向返回iri_to_uri(resolver._reverse_with_prefix(view,前缀,*args,**kwargs))文件"C:\Users\Hp\anaconda3\envs\MyRLXEnv\lib\site-packages\django\urls\resolvers.py",行685,在_reverse_with_prefix raise (Msg)中

代码语言:javascript
复制
 Exception Type: NoReverseMatch at /purchase_form/
    Exception Value: Reverse for 'purchase_form' not found. 'purchase_form' is not a valid view function or pattern name.
EN

回答 1

Stack Overflow用户

发布于 2021-02-24 15:42:55

当您在应用程序的app_name‘s urls.py 命名空间中设置url时,即当您想要反转url时,应该使用<app_name>:<url_name>。因此,在您看来,PurchaseCreateView而不是:

代码语言:javascript
复制
success_url = reverse_lazy("purchase_form")

你应该写:

代码语言:javascript
复制
success_url = reverse_lazy("myinventory:purchase_form")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66354013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档