我为移动客户端制作了我的 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。