如何使用 url 中的多個引數檢索物件?示例:'customer/3/order/1/' 或 'customer/<int:customer_pk>/order/<int:pk>/'
使用 shell 我能夠得到這樣的物件,但我似乎無法從視圖中做到這一點。
>>> from temp.models import Customer, Order
>>> from temp.serializers import CustomerSerializer, OrderSerializer
>>> q = Order.objects.filter(customer=1).get(order_number=2)
>>> q.order_name
'fruit'
視圖.py
from rest_framework import generics
from rest_framework.views import APIView
from .models import *
from .serializers import *
class OrderDetailView(generics.RetrieveDestroyAPIView):
serializer_class = OrderSerializer
def get_queryset(self):
queryset = Order.objects.filter(customer_id=self.kwargs["customer_pk"]).get(order_number=self.kwargs["pk"])
return queryset
網址.py
from django.urls import path
from .views import *
urlpatterns = [
path('<int:customer_pk>/orders/<int:pk>/', OrderDetailView.as_view()),
]
uj5u.com熱心網友回復:
我們可以覆寫查詢集:
class OrderDetailView(generics.RetrieveDestroyAPIView):
lookup_field = "pk"
serializer_class = OrderSerializer
def get_queryset(self):
return Order.objects.filter(customer_id=self.kwargs["customer_pk"])
就這樣,檢索Order已經由get_object()方法處理的物件。
如果想要更安全,請確保客戶有效(客戶可用):
from django.shortcuts import get_object_or_404
class OrderDetailView(generics.RetrieveDestroyAPIView):
lookup_field = "pk"
serializer_class = OrderSerializer
def get_customer(self):
return get_object_or_404(
Customer.objects.all(),
id=self.kwargs["customer_pk"]
)
def get_queryset(self):
customer = self.get_customer()
return Order.objects.filter(customer=customer)
uj5u.com熱心網友回復:
過濾帶有多個引數的查詢
queryset = Order.objects.filter(customer_id=self.kwargs["customer_pk"],order_number=self.kwargs["orde_pk"])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/527553.html
標籤:Pythondjangodjango模型django-rest-frameworkdjango-views
