2

我的產品模型有一個名爲「product_id」的額外字段,它是一個uuid字符串。現在我可以根據主鍵ID獲取產品詳細信息。我想通過使用「product_id」字段來更改它以獲取產品詳細信息。Django rest框架:使用主鍵以外的字段獲取詳細視圖整數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',) 

我覺得我必須包括一看場實現這一目標。

回答

2

添加lookup_fieldproduct_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

+0

需要urls.py做怎樣的改變?實際上,我們需要調用字符串作爲product_id –

+0

更改正則表達式以確保它可以接受'product_id'。現在它似乎只接受數字? – masnun

+0

這樣? 'url(r'^ products /(?P [\ w \ - ] +)/ $',views.ProductDetailCustom.as_view(),name ='product-detail')' –