GTA.sprx
GTA.sprx

Reputation: 827

NoReverseMatch with generic DeleteView

I cannot figure out why I'm getting NoReverseMatch when trying to use this view. I'd like to get generic views to work because it seems like alot less code to do the same task.

views.py

from django.views.generic import DetailView, ListView, UpdateView, CreateView, DeleteView
from django.urls import reverse_lazy
from .models import *

class ProductDeleteView(DeleteView):
    model = Product
    success_url = reverse_lazy('homepage_view')

models.py

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

class Product(models.Model):
    name = models.CharField(max_length=50)
    slug = AutoSlugField(null=True, default=None,
                         unique=True, populate_from='name')

    def get_delete_url(self):
        return reverse('product_delete_view', args=(self.slug,))

    class Meta:
        verbose_name_plural = "Products"

    def __str__(self):
        return self.name

urls.py

from . import views
from django.urls import path, include
from django.views.generic import TemplateView

app_name = "main"

urlpatterns = [
    path('product/delete/<slug:slug>/', views.ProductDeleteView.as_view(), name='product_delete_view'),
]

template

<p>
    <a class="btn btn-primary" href="{{product.get_delete_url}}">Delete Product</a>
</p>

Upvotes: 0

Views: 31

Answers (1)

bmons
bmons

Reputation: 3392

you should add the app name also in get delete url method

 def get_delete_url(self):
        return reverse('main:product_delete_view', args=(self.slug,))

Upvotes: 1

Related Questions