Python 使用多个查找字段进行反向查找的Rest调用
在Django rest框架中,有没有一种方法可以拥有多个查找字段?我知道这听起来不太友好Python 使用多个查找字段进行反向查找的Rest调用,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,在Django rest框架中,有没有一种方法可以拥有多个查找字段?我知道这听起来不太友好 我有一个公司模型,我想先列出他们所在的国家,然后再列出一个slug字段,比如:/companys//。有办法做到这一点吗?假设您使用的是路由器,我认为您可以执行以下操作: router.register(r'companies/(?P<iso_country>[^/.]+)/', YourCompanyViewSet, 'company-base') 创建mixin,如下所示: class
我有一个
公司
模型,我想先列出他们所在的国家,然后再列出一个slug字段,比如:/companys//
。有办法做到这一点吗?假设您使用的是路由器,我认为您可以执行以下操作:
router.register(r'companies/(?P<iso_country>[^/.]+)/', YourCompanyViewSet, 'company-base')
创建mixin,如下所示:
class MultipleFieldLookupMixin(object):
def get_object(self):
queryset = self.get_queryset() # Get the base queryset
queryset = self.filter_queryset(queryset) # Apply any filter backends
filter = {}
for field in self.lookup_fields:
filter[field] = self.kwargs[field]
return get_object_or_404(queryset, **filter) # Lookup the object
并将此mixin添加到您的视图集中:
class YourCountryViewSet(MultipleFieldLookupMixin, generics.RetrieveAPIView):
lookup_fields = ('iso_country', 'slug')
...
资料来源:谢谢,我会尽可能尝试一下。这听起来像是我需要的工作。在这种情况下,什么是url模式,我们应该注册一个新的模式吗?或者
模型详细信息请求的url是什么?像example.com/api/pk/
是用于单个查找字段,现在是example.com/api/iso_country/slug/
?是的,url:example.com/api/
您可能想用以下内容更新您的答案:基本上,文档中的示例缺少对象级权限检查。
class YourCountryViewSet(MultipleFieldLookupMixin, generics.RetrieveAPIView):
lookup_fields = ('iso_country', 'slug')
...