我为移动客户端做了django项目的休息api。
我有 Categories 对象的这个模型和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 :(得分:0)
您可以在视图中设置lookup_field。
class CategoryViewSet(viewsets.ModelViewSet):
queryset = Category.objects.all()
serializer_class = CategoryDetailSerializer
lookup_field = '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,这样您就可以确保它是一个有效的网址。