aja*_*xon 6 django-rest-framework
当向我的 ListAPIView 发出请求时,会多次调用 get_queryset() 方法。它被调用了 4 次,直到我删除了默认的 django 模型权限,但现在它仍然被调用了两次。还有什么可能导致重复呼叫。
class PropertyPledgeList(generics.ListAPIView):
serializer_class = PledgeListSerializer
ordering_fields = ('amount_cents')
def get_queryset(self):
slug = self.kwargs['slug']
return get_object_or_404(Property, slug=slug).pledges.all().prefetch_related("user")
Run Code Online (Sandbox Code Playgroud)
bdo*_*leu -1
重复查询是get_object_or_404().
如果你想从 URL 关键字参数中检索父对象,你可以将其设置为调度方法中的一个属性,该方法仅被调用一次,然后访问get_queryset().
from rest_framework.exceptions import NotFound
class PropertyPledgeList(generics.ListAPIView):
queryset = PropertyPledge.objects.all()
serializer_class = PledgeListSerializer
def dispatch(self, request, *args, **kwargs):
try:
self.property = Property.objects.get(id=kwargs['slug'])
except Property.DoesNotExist:
self.property = None
return super().dispatch(request, *args, **kwargs)
def get_queryset(self):
if not self.property:
raise NotFound
return self.property.get_pledges()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1402 次 |
| 最近记录: |