Django rest框架:使用除主键整数id之外的字段获取详细信息视图

Aru*_* SS 7 python django django-models django-views django-rest-framework

我的产品模型有一个名为"product_id"的额外字段,它是一个uuid字符串.现在我可以根据主键ID获取产品详细信息.我想更改此信息以使用"product_id"字段获取产品详细信息.

我目前的urls.py

url(r'^products/(?P<pk>[0-9]+)/$', views.ProductDetailCustom.as_view(), name='product-detail'),
Run Code Online (Sandbox Code Playgroud)

现在我这样打电话.

http://127.0.0.1:8000/api/v1/products/1460
Run Code Online (Sandbox Code Playgroud)

我希望这应该是这样的.

http://127.0.0.1:8000/api/v1/products/04396134-3c90-ea7b-24ba-1fb0db11dbe5
Run Code Online (Sandbox Code Playgroud)

views.py

class ProductDetailCustom(generics.RetrieveAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductCustomSerializer
Run Code Online (Sandbox Code Playgroud)

serializer.py

class ProductCustomSerializer(serializers.ModelSerializer):

    class Meta:
        model = Product
        fields =  ('url', 'id','product_id', 'title', 'description','structure','date_created',)
Run Code Online (Sandbox Code Playgroud)

我想我必须包括一个外观领域来实现这个目标.

mas*_*nun 6

添加lookup_fieldproduct_id:

class ProductDetailCustom(generics.RetrieveAPIView):
    lookup_field = "product_id"
    queryset = Product.objects.all()
    serializer_class = ProductCustomSerializer
Run Code Online (Sandbox Code Playgroud)

lookup_field会由使用get_object这将检索模型实例调用.因此,您可以get_object在视图上编写自定义方法.

参考:http://www.django-rest-framework.org/api-guide/generic-views/#genericapiview