Is it possible to use a object\'s slug (or any other field) to access the details of an item, instead of using the ID?
For example, if I have an item with the slug \
In some scenarios you may want to have both the "low level" pk
value and the more semantic slug
. I like to have both options personally and do this by setting the lookup_field
later in the viewset as_view()
method in my urls.py
.
Note: the following defaults to
pk
with an optionalslug
lookup. To combine this with previous answer you would change thelookup_field
below to be"pk"
instead of"slug".
from django.conf.urls import *
from rest_framework.urlpatterns import format_suffix_patterns
from myobjects import views as myviews
# simplify the view definitions by splitting out the options
REQDICT = {
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
}
# define the pk detail view
myobject_detail = myviews.MyObjectViewset.as_view(REQDICT)
# define the slug detail view
myobject_slug_detail = myviews.MyObjectViewset.as_view(REQDICT, lookup_field='slug')
urlpatterns = [
url(r"^myobjects/(?P\d*)/$",
myobject_detail,
name = 'myobject-detail'),
url(r"^myobjects/(?P[-\w]+)/$",
myobject_slug_detail,
name = 'myobject-slug-detail'),
]
urlpatterns = format_suffix_patterns(urlpatterns)
This could also be in your
views.py
- my preference is to see it beside theurlpatterns
list.