我有一個模型視圖集:
class OrderViewSet(viewsets.ModelViewSet):
serializer_class = OrderSerializer
pagination_class = DefaultPagination
queryset = Order.objects.all()
def get_queryset(self):
userId = self.request.query_params.get('userId')
if userId is not None:
query = Order.objects.filter(owner__id=userId).order_by('-createdAt')
else:
query = Order.objects.order_by('-createdAt')
return query
這是注冊網址
router = routers.DefaultRouter()
router.register('api/v1/order', OrderViewSet, basename='order')
我發現在覆寫 get_queryset 后,我??不能再按如下所示的一個訂單 ID 進行查詢:/api/v1/order/1,它只是回傳detail: not found
我確實看到 Django 說它支持:
^api/v1/order/$ [name='order-list']
^api/v1/order\.(?P<format>[a-z0-9] )/?$ [name='order-list']
^api/v1/order/(?P<pk>[^/.] )/$ [name='order-detail']
^api/v1/order/(?P<pk>[^/.] )\.(?P<format>[a-z0-9] )/?$ [name='order-detail']
這樣做的正確方法應該是什么?謝謝!
uj5u.com熱心網友回復:
要解決此問題,請super()在覆寫時呼叫get_queryset()
試試這個
def get_queryset(self):
queryset = super(OrderViewSet, self).get_queryset()
userId = self.request.query_params.get('userId')
if userId is not None:
queryset = queryset.filter(owner__id=userId).order_by('-createdAt')
else:
queryset = queryset.order_by('-createdAt')
return query
uj5u.com熱心網友回復:
使用 Django 的基于函式的視圖和基于類的視圖對您有什么好處。我可以想到一個解決方案,您可以在其中創建另一個基于函式的視圖來處理上述功能,并讓基于類的視圖 get 方法處理 pk 查詢集。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/381162.html
