【问题标题】:NoReverseMatch at /vistaprevia/pedidos/4/edit Reverse for 'editr' not found. 'editr' is not a valid view function or pattern nameNoReverseMatch at /vistaprevia/pedidos/4/edit 未找到“editr”的反向。 “editr”不是有效的视图函数或模式名称
【发布时间】: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


【解决方案1】:

editar_pedido 上将返回更改为:

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

【讨论】:

  • 尝试在模板上使用 href="{% url 'editr' op.pk %}"
  • 同样的问题,我希望我能知道更多但不知道如何解决
  • 你尝试重启服务器了吗?
  • 很多次。认真
猜你喜欢
  • 2019-05-19
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 2019-06-01
  • 2020-07-18
  • 1970-01-01
  • 2020-08-07
相关资源
最近更新 更多