Multiple lookup_fields for django rest framework

后端 未结 8 564
你的背包
你的背包 2020-12-10 03:30

I have multiple API which historically work using id as the lookup field:

/api/organization/10

I have a frontend consuming tho

8条回答
  •  一向
    一向 (楼主)
    2020-12-10 04:16

    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)
            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
    
    
    class RetrieveUserView(MultipleFieldLookupMixin, generics.RetrieveAPIView):
        queryset = User.objects.all()
        serializer_class = UserSerializer
        lookup_fields = ('account', 'username')

提交回复
热议问题