Python 使用多个查找字段进行反向查找的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

在Django rest框架中,有没有一种方法可以拥有多个查找字段?我知道这听起来不太友好


我有一个
公司
模型,我想先列出他们所在的国家,然后再列出一个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')

...