Django REST 框架.通过唯一 url 获取对象



我为移动客户端制作了我的 django 项目的 rest api。

我有这个类别对象的模型和 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/序列化程序.py

class CategoryDetailSerializer(ModelSerializer):
    class Meta:
        model = Category
        fields = [
            'id',
            'title',
            'url'
        ]       

接口/视图.py

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

和 API/网址.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/休息框架可能吗?

或者也许我应该先获取 [pk]:[url] 对象的映射,然后从中获取 url 的 pk 并将其传递给现有的请求方法..?

您可以在视图中设置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。

最新更新