chobo
chobo

Reputation: 4862

How to pass DetailView over the 'slug' in url?

How to pass DetailView over the 'slug' in url?

First, let's look at my code.

urls.py

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^customer/(?P<slug>[^/]+)/$', customerDetailView.as_view()),
)

views.py

from django.views.generic import DetailView

class customerDetailView(DetailView):
    context_object_name = 'customerDetail'
    template_name = "customerDetail.html"
    allow_empty = True
    model = Customer
    slug_field = 'name' # 'name' is field of Customer Model

Now, my code is like above.

And I want to change code like below.

urls.py

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^customer/(?P<slug>[^/]+)/$', customer),
)

views.py

from django.views.generic import DetailView

class customerDetailView(DetailView):
    context_object_name = 'customerDetail'
    template_name = "customerDetail.html"
    allow_empty = True
    model = Customer
    slug_field = 'name' # 'name' is field of Customer Model

def customer(request, slug):
    if request.method == "DELETE":
        pass # some code blah blah
    elif request.method == "POST"
        pass
    elif request.method == "GET":
        return customerDetailView.as_view(slug=slug)(request) # But this line is not working... just causing error TypeError, customerDetailView() received an invalid keyword 'slug'

As you know, DetailView need to 'slug' or 'pk'... So I must deliver 'slug' over to the DetailView... But I don't know how do I deliver 'slug'...

I'm waiting your answer front of moniter...

Thank you!

Upvotes: 0

Views: 2937

Answers (1)

caio
caio

Reputation: 1989

The correct way should be

return customerDetailView.as_view()(request, slug=slug)

Upvotes: 4

Related Questions