NoReverseMatch в Django после создания объекта - PullRequest
0 голосов
/ 23 апреля 2020

После создания объекта без шаблона я пытаюсь вернуться в тот же список, но он отправляет ошибку обратного соответствия.

Это мой код:

Функция для создания объекта от другой модели:

def pieza_fast_create(request, id_reporte):
 template_name = "metalitec/reportes_detalle.html"
 context_object_name = "obj"

 reporte = Reporte.objects.get(id=id_reporte)
 pieza=Pieza.objects.create(reporte=reporte, descripcion="PIEZA 1")

 piezas = Pieza.objects.all()

 return render(request, template_name, {'id_reporte':id_reporte,'reporte':reporte, 'piezas':piezas})

Текущий просмотр:

class ReporteDetalleView(LoginRequiredMixin, generic.TemplateView):
 model = Reporte
 template_name = "metalitec/reportes_detalle.html"
 context_object_name = "obj"
 #login_url = "bases:login"

 def get(self, request, *args, **kwargs):        
    id_reporte = kwargs['id_reporte']

    reporte = Reporte.objects.filter(id=id_reporte) 
    piezas = Pieza.objects.filter(reporte__id=id_reporte)        

    return render(request, self.template_name, {'id_reporte':id_reporte, 'reporte':reporte, 'piezas':piezas})

URL-адреса:

path('reportes/piezas/fast/<int:id_reporte>',pieza_fast_create, name='pieza_new_fast'),    
path('reportes/detalle/<int:id_reporte>',ReporteDetalleView.as_view(), name='reporte_detalle'),

Ошибка:

Reverse for 'pieza_new_fast' with arguments '('',)' not found. 1 pattern(s) tried: ['metalitec/reportes/piezas/fast/(?P<id_reporte>[0-9]+)$']

1 Ответ

0 голосов
/ 23 апреля 2020

Вместо повторной визуализации шаблона metalitec/reportes_detalle.html лучше перенаправить на это представление ReporteDetalleView. Вы можете попробовать так:

from django.shortcuts import redirect

def pieza_fast_create(request, id_reporte):    
     reporte = Reporte.objects.get(id=id_reporte)
     pieza=Pieza.objects.create(reporte=reporte, descripcion="PIEZA 1")
     return redirect('reporte_detalle', id_reporte=id_reporte)

Кроме того, вы можете добавить некоторые улучшения в ваш код, например:

class ReporteDetalleView(LoginRequiredMixin, generic.TemplateView):
     model = Reporte
     template_name = "metalitec/reportes_detalle.html"
     slug_url_kwarg = "id_reporte"
     context_object_name = "reporte"

     def get_context_data(self, **kwargs):        
        context = super(ReporteDetalleView, self).get_context_data(**kwargs)
        reporte = context["reporte"]
        context["piezas"] = Pieza.objects.filter(reporte=reporte)
        context["id_reporte"] = self.kwargs["id_reporte"]
        return context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...