【发布时间】:2021-07-16 14:50:58
【问题描述】:
我在 django 3.2 和 python 3.9.2 中的编辑视图有问题,问题是当我在我的视图中进入链接 EDITAR 时,它会向我抛出错误“NoReverseMatch at /vistaprevia/pedidos/4/edit ”并对我说“找不到'editr'的反向。'editr'不是有效的视图函数或模式名称。”,我找不到代码发生了什么。这是我的代码
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>
【问题讨论】:
-
请edit您的问题并显示
editar_pedido.html的内容。 -
完成。我最近添加了
-
{% url 'editr' pk=op.opid %}这应该是{% url 'vistaprevia:editr' pk=op.opid %},因为您的网址已命名空间。 -
找不到关键字参数“{'pk': ''}' 的“editr”的反向。尝试了 1 种模式:['vistaprevia/pedidos/(?P
[0-9]+)/edit$'] 现在是
标签: python-3.x django django-views