Error in get_absolute_url Django

Asked

Viewed 15 times

-1

I have the following error in Django:

Reverse for 'list_produtos' with Arguments '(2,)' not found. 1 Pattern(s) tried: ['$']

Follows the codes:

py.models

from django.db import models
from django.urls import reverse

class ListaManager(models.Manager):
    def get_queryset(self):
        return super(ListaManager, self).get_queryset().filter(disponivel = True)
    
class Departamento(models.Model):
    nome = models.CharField(max_length = 25)
    slug = models.SlugField(max_length = 100)
    pf = models.TextField()
   
    def _str_(self):
        return self.nome
    
class Produto(models.Model):   
    nome = models.CharField(max_length = 50)
    preco = models.DecimalField(max_digits = 100,decimal_places = 2)
    estoque = models.PositiveIntegerField()
    disponivel = models.BooleanField(default = False)
    descricao = models.TextField()
    departamento = models.ForeignKey(Departamento, related_name = 'departamento', null = True, on_delete = models.CASCADE)
    numero_produto = models.CharField(max_length = 8)
    slug = models.SlugField(max_length = 100)
    lista = ListaManager()

    def get_absolute_url(self):
        return reverse('main:list_produtos', args = [self.id])
    
    def _str_(self):
        return self.nome

class dProduto(models.Model):
    dp = models.ForeignKey(Produto, related_name = 'produto', null = True, on_delete = models.CASCADE)

py.

from django.urls import path
from .import views

from django.views.generic import TemplateView

app_name = 'main'

urlpatterns = [
    path('', views.list_produtos, name = 'list_produtos'),
    path('ajuda/', TemplateView.as_view(template_name = 'produtos/ajuda.html'),
         name = 'ajuda'),
    path('<int:p>', views.produtos_detail, name = 'produtos_detail'),
    ]

py views.

from django.shortcuts import render, get_object_or_404
from .models import Departamento, Produto

def list_produtos(request):
    produtos = Produto.lista.all()
    return render(request, 'produtos/list_produtos.html', {'produtos': produtos})

def produtos_detail(request, p):
    produtos = get_object_or_404(Produto, id = p)
    return render(request, 'produtos/produtos_datail.html', {'produtos': produtos})

1 answer

2

In the function below, you are passing as parameter the self.id

    def get_absolute_url(self):
        return reverse('main:list_produtos', args = [self.id])

The url is not ready to receive parameters:

path('', views.list_produtos, name = 'list_produtos'),

I believe you want this:

    def get_absolute_url(self):
        return reverse('main:produtos_detail', args = [self.id])

Note: Reverse link to produtos_detail

Browser other questions tagged

You are not signed in. Login or sign up in order to post.