首页 > 解决方案 > /vistaprevia/pedidos/4/edit 上的 NoReverseMatch 未找到“editr”的反向。“editr”不是有效的视图函数或模式名称

问题描述

我在 django 3.2 和 python 3.9.2 中的编辑视图有问题,问题是当在我的视图中进入链接 EDITAR 时,它会抛出错误“NoReverseMatch at /vistaprevia/pedidos/4/edit”并说对我来说“找不到'editr'的反向。'editr'不是有效的视图函数或模式名称。”,我找不到代码发生了什么。这是我的代码

视图.py

from django.shortcuts import render, redirect, get_object_or_404
from django.views import generic
from django.views.generic.edit import UpdateView
from vistaprevia.models import Op
from vistaprevia.forms import CargarFormOp, EditarFormOp#, EditarFormRem
# Create your views here.
from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader

app_name = 'vistaprevia'

#VISTA QUE MUESTRA LOS ULTIMOS 10 PEDIDOS
def index(request):
    ultimasop = Op.objects.all().order_by('-fecha')
    return render(request, 'vistaprevia/index.html', context={'ultimasop':ultimasop})

#DETALLE PEDIDOS
class PedidoDetailView(generic.DetailView):
    model = Op

#CARGA DE PEDIDOS, EMPIEZ LA ACCION, WIIIIIIIIII
def cargar_pedido(request):
    if request.method=='POST':
        form = CargarFormOp(request.POST)
        
        if form.is_valid():
            fecha = form.cleaned_data['fecha']
            cliente = form.cleaned_data['cliente']
            tipoop = form.cleaned_data['tipoop']
            fact = form.cleaned_data['fact']
            condicion = form.cleaned_data['condicion']
            despacho = form.cleaned_data['despacho']
            vendedor = form.cleaned_data['vendedor']
            
            newdoc = Op(fecha=fecha, cliente=cliente, tipoop=tipoop,fact=fact, condicion=condicion, despacho=despacho ,vendedor=vendedor)
            newdoc.save()
            return redirect("index")
    else:
        form = CargarFormOp()
    return render(request, 'vistaprevia/formulario.html', {'form': form})
    
#AGREGAMOS TODO LO REFERETE AL PAGO Y DEMAS, MENS COSAS PARA QUE HAGA EN MI TRABAJO, SUPER WIIIIIIIIII
def editar_pedido(request, pk):
    pedid = get_object_or_404(Op, pk=pk)
    if request.method=="POST":
        form = EditarFormOp(request.POST, instance = pedid)
        if form.is_valid():
            pedid.npedido1 = form.save(commit=False)
            pedid.nfactura1 = form.save(commit=False)
            pedid.nrecibo1 = form.save(commit=False)
            pedid.npedido2 = form.save(commit=False)
            pedid.nfactura2 = form.save(commit=False)
            pedid.nrecibo2 = form.save(commit=False)
            pedid.fecharem1 = form.save(commit=False)
            pedid.nrem1 = form.save(commit=False)
            pedid.fecharem2 = form.save(commit=False)
            pedid.nrem2 = form.save(commit=False)   
            pedid.save()
            return redirect('pedido-detalle', pk=pedid.pk)
    else:
        form = EditarFormOp(instance=pedid)
    return render(request, 'vistaprevia/editar_pedido.html', {'form':form})
 

表格.py

from django.forms import ModelForm
from .models import Op

class CargarFormOp(ModelForm):
    
    class Meta:
        model = Op
        fields = ['fecha', 'cliente', 'tipoop', 'fact', 'condicion', 'despacho', 'vendedor', 'estadoop', 'deudaop']
   
    def __init__(self, *args, **kwargs):
        super(CargarFormOp, self).__init__(*args, **kwargs)
   
class EditarFormOp(ModelForm):

    class Meta:
        model = Op
        fields = ['npedido1', 'nfactura1', 'nrecibo1', 'npedido2', 'nfactura2', 'nrecibo2', 'fecharem1', 'nrem1', 'fecharem2', 'nrem2']
    
    def __init__(self, *args, **kwargs):
        super(EditarFormOp, self).__init__(*args, **kwargs)

网址.py

from django.urls import path
from vistaprevia import views

app_name = 'vistaprevia'

urlpatterns = [ 
    path('', views.index, name='index'),
    path('cargar/', views.cargar_pedido, name='cargar'),
    path('pedidos/<int:pk>', views.PedidoDetailView.as_view(), name='pedido-detalle'),    
    path('pedidos/<int:pk>/edit', views.editar_pedido, name='editr'),
]

op-detail.html

            <article class="col-12 col-sm-6 col-md-4 tarjeta3">
                <h1>Remitos:</h1>
                <p>Fecha: {{ fecharem1 }}</p>
                <p>N° Remito: {{ nrem1 }}(1)</p>
                <p><a class="light bg-dark col-2" href="#">Remito 1</a></p>
                <p>Fecha: {{ fecharem2 }} </p>
                <p>N° Remito (2): {{nrem2}}</p>
                <p><a class="light bg-dark col-2" href="#">Remito 2</a></p>
                <p><a class="light bg-dark col-2" href="{% url 'vistaprevia:editr' op.pk %}">Editar</a></p>
            </article>

编辑器_pedido.html

{% extends 'vistaprevia/plantilla.html' %}
{% load static %}
{% load i18n %}
{% block content %}
<!--muestra por pedidos-->
    <main class="container-fluid">
        <div class="row">
            <article class="col-12 col-sm-6 col-md-4 tarjeta1">
                <h1>Pedido: </h1>
                <p>Fecha: {{ op.fecha }}</p>
                <p>Cliente: {{ op.cliente }}</p>
                <p>Tipo OP: {{ op.tipoop }}</p>
                <p>% Facturado: {{ op.fact }}</p>
                <p>Condicion de pago: {{ op.condicion }}</p>
                <p>Despacho: {{ op.despacho }}</p>
                <p>Vendedor: {{ op.vendedor }}</p>
                <p><a class="light bg-dark col-2" href="#">Archivo OP</a></p>
                <p><a class="light bg-dark col-2" href="#">Proforma (1)</a></p>
                <p><a class="light bg-dark col-2" href="#">Proforma (2)</a></p>
            </article>
            <article class="col-12 col-sm-6 col-md-4 tarjeta2">
                {{ form.as_p }}
                <input type="submit" value="GUARDAR">
            </article>
            <article class="col-12 col-sm-6 col-md-4 tarjeta3">
                <h1>Remitos:</h1>
                <p>Fecha: {{ op.fecharem1 }}</p>
                <p>N° Remito: {{ op.nrem1 }}(1)</p>
                <p><a class="light bg-dark col-2" href="#">Remito 1</a></p>
                <p>Fecha: {{ op.fecharem2 }} </p>
                <p>N° Remito (2): {{ op.nrem2 }}</p>
                <p><a class="light bg-dark col-2" href="#">Remito 2</a></p>
                <p><a href="{% url 'editr' pk=op.opid %}" >Editar</a></p>
            </article>          
        </div>
    </main> 


标签: python-3.xdjangodjango-views

解决方案


editar_pedido返回更改为此:

return redirect(reverse('pedido-detalle', kwargs={"pk": pedid.pk}))

推荐阅读