Python 如何在django rest框架中不敏感地匹配url大小写?

Python 如何在django rest框架中不敏感地匹配url大小写?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我在aurl.py中有这一行 url(r'^(?i)(?P<datasource>[a-z]+)/$', views.OdbcConfigDatasourceDetail.as_view()), url(r'^(?i)(?P[a-z]+)/$”,views.odbcconfiguredatasourcedetail.as_view(), (?i)应该使regex不区分大小写。我怀疑它实际上是在不敏感地搜索大小写,但它正在传递带有完整大小写的命名组datasource,这会导致查找

我在a
url.py中有这一行

url(r'^(?i)(?P<datasource>[a-z]+)/$', views.OdbcConfigDatasourceDetail.as_view()),
url(r'^(?i)(?P[a-z]+)/$”,views.odbcconfiguredatasourcedetail.as_view(),
(?i)
应该使regex不区分大小写。我怀疑它实际上是在不敏感地搜索大小写,但它正在传递带有完整大小写的命名组
datasource
,这会导致查找失败


如何在传递命名组或查找字段之前将其小写?

我使用(优秀的)Django Rest框架文档,特别是

例如,如果需要根据URL配置中的多个字段查找对象,可以创建一个mixin类,如下所示:

 class MultipleFieldLookupMixin(object):
     """
     Apply this mixin to any view or viewset to get multiple field filtering
     based on a `lookup_fields` attribute, instead of the default single field filtering.
     """
     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:
             if self.kwargs[field]: # Ignore empty fields.
                 filter[field] = self.kwargs[field]
         return get_object_or_404(queryset, **filter)  # Lookup the object
然后,只要在需要应用自定义行为的任何时候将此mixin应用于视图或视图集即可

 class RetrieveUserView(MultipleFieldLookupMixin, generics.RetrieveAPIView):
     queryset = User.objects.all()
     serializer_class = UserSerializer
     lookup_fields = ('account', 'username')
我将此代码添加到我的项目中

class CaseInsensitiveLookupMixin(object):
    """
    Stole majority of this mixin 
    from http://www.django-rest-framework.org/api-guide/generic-views/
    """
    def get_object(self):
        queryset = self.get_queryset()             # Get the base queryset
        queryset = self.filter_queryset(queryset)  # Apply any filter backends
        filter = {self.lookup_field: self.kwargs[self.lookup_field].lower()}

        return get_object_or_404(queryset, **filter)  # Lookup the object
必须将django.jettcuts import get_object_或_404
添加到该文件的顶部,并将详细视图更改为类OdbcConfigDatasourceDetail(CaseInsensitiveLookupMixin,generics.RetrieveUpdatedStroyapiew):


DRF团队优秀文档的道具。

在您看来,您可以使用类似datasource=datasource.lower()@Jingo的东西,它给我一个NameError
NameError:name'datasource'未定义
。视图本身是派生的
类OdbcConfigDatasourceDetail(generics.RetrieveUpdateStroyapView):