I have a problem with an edit view in django 3.2 and python 3.9.2, the problem is when a get into the link EDITAR in my view, it throws me the error "NoReverseMatch at /vistaprevia/pedidos/4/edit" and says to me that "Reverse for 'editr' not found. 'editr' is not a valid view function or pattern name.", I cant found what is going on with the code. Here is my code
Views.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})
forms.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)
urls.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>
editar_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>