为了链接过滤器,需要获取上一个queryset。这可以通过调用
super().get_queryset(request)
. 它将从视图继承的其他类中获取queryset并应用筛选器:
class VendorOwnedQuerySetMixin(models.QuerySet):
def get_queryset(self, request):
qs = super().get_queryset(request)
vendor_user = VendorUserModel.objects.get(user=request.user)
return qs.filter(vendor__user=vendor_user.vendor)
class OrganizationOwnedQuerySetMixin(object):
def get_objects_for_organization(self, request):
qs = super().get_queryset(request)
return qs.filter(organization__domains__name=hostname_from_request(request)
记住你
必须
设置混音
之前
为了工作的风景。例如:
class MyView(OrganizationOwnedQuerySetMixin, VendorOwnedQuerySetMixin, RetrieveAPIView):
...
拜访
get_queryset
会得到
RetrieveAPIView
将传递到的queryset
VendorOwnedQuerySetMixin
一旦
super()
调用返回,应用筛选器并将结果返回给
OrganizationOwnedQuerySetMixin
之后
超级()
调用,然后应用其筛选器并返回结果。