2017-02-12 76 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

谢谢!有用。 –