Django Rest Framework: Access item detail by slug instead of ID

后端 未结 2 1152
我在风中等你
我在风中等你 2020-12-08 06:58

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 \

2条回答
  •  离开以前
    2020-12-08 07:22

    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 optional slug lookup. To combine this with previous answer you would change the lookup_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 the urlpatterns list.

提交回复
热议问题