2017-02-12 47 views
0

我爲移動客戶端製作了我的django項目的其餘api。Django REST框架。通過獨特的url獲取對象

我有這樣的模型和API結構分類對象:

models.py

class Category(models.Model): 
    title = models.CharField(max_length=200, verbose_name="Title") 
    url = models.CharField(max_length=200, verbose_name="Url") 

API/serializers.py

class CategoryDetailSerializer(ModelSerializer): 

    class Meta: 
     model = Category 
     fields = [ 
      'id', 
      'title', 
      'url' 
     ]  

API/views.py

class CategoryViewSet(viewsets.ModelViewSet): 
    queryset = Category.objects.all() 
    serializer_class = CategoryDetailSerializer 

和API/urls.py

urlpatterns = [ 
    url(r'^(?P<pk>\d+)/$', CategoryViewSet.as_view({'get': 'retrieve'}), name='detail'), 
] 

要檢索類別對象我用GET請求來my_server_url/api/categories/[pk]/

的問題是如何能得到對象與它的url場(是唯一的)。例如像這樣: my_server_url/api/categories/category_1/ rest-framework可以嗎?

也許我應該首先獲取[pk]:[url]對象的地圖,然後通過url獲取pk並將其傳遞給現有的請求方法..?

回答

0

您可以在視圖中設置lookup_field。

class CategoryViewSet(viewsets.ModelViewSet): 
    queryset = Category.objects.all() 
    serializer_class = CategoryDetailSerializer 
    lookup_field = 'url' 

您還需要在URL正則表達式更改爲:

urlpatterns = [ 
    url(r'^(?P<url>[-\w]+)/$', CategoryViewSet.as_view({'get': 'retrieve'}), name='detail'), 
] 

但是我會建議存儲唯一字段作爲廢料場https://docs.djangoproject.com/en/1.10/ref/models/fields/#slugfield所以你保證這是一個有效的URL。

+0

謝謝!有用。 –