【问题标题】:Django rest framework: Get detail view using a field other than primary key integer idDjango rest框架:使用主键整数id以外的字段获取详细视图
【发布时间】:2017-09-13 01:04:41
【问题描述】:

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

我当前的 urls.py

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

现在这样打电话。

http://127.0.0.1:8000/api/v1/products/1460

我希望这应该是这样的。

http://127.0.0.1:8000/api/v1/products/04396134-3c90-ea7b-24ba-1fb0db11dbe5

views.py

class ProductDetailCustom(generics.RetrieveAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductCustomSerializer

serializer.py

class ProductCustomSerializer(serializers.ModelSerializer):

    class Meta:
        model = Product
        fields =  ('url', 'id','product_id', 'title', 'description','structure','date_created',)

我想我必须包含一个外观来实现这一点。

【问题讨论】:

    标签: python django django-models django-views django-rest-framework


    【解决方案1】:

    lookup_field 添加到product_id

    class ProductDetailCustom(generics.RetrieveAPIView):
        lookup_field = "product_id"
        queryset = Product.objects.all()
        serializer_class = ProductCustomSerializer
    

    lookup_field 将被用于检索模型实例的 get_object 调用使用。因此,您可以在视图上编写自定义 get_object 方法。

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

    【讨论】:

    • urls.py 需要做哪些修改?实际上我们需要将字符串称为product_id
    • 更改正则表达式以确保它可以接受product_id。目前它似乎只接受数字?
    • 这样吗? url(r'^products/(?P&lt;product_id&gt;[\w\-]+)/$', views.ProductDetailCustom.as_view(), name='product-detail')
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多