Django REST框架。通过独特的url获取对象
问题描述:
我为移动客户端制作了我的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并将其传递给现有的请求方法..?
答
您可以在视图中设置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。
谢谢!有用。 –