Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dj-kaos-utils / rest.py
Size: Mime:
from functools import reduce

from django.db.models import Q
from django.http import Http404
from rest_framework.generics import GenericAPIView, get_object_or_404


class ExtraLookupFieldsViewSetMixin(GenericAPIView):
    # Inspired by:
    # https://stackoverflow.com/questions/38461366/multiple-lookup-fields-for-django-rest-framework#comment96214635_38462137
    extra_lookup_fields = ()

    def get_object(self):
        try:
            return super().get_object()
        except Http404:
            pass

        queryset = self.filter_queryset(self.get_queryset())
        lookup_value = self.kwargs[self.lookup_field]
        q = reduce(lambda acc, curr: acc | Q(**{curr: lookup_value}),
                   self.extra_lookup_fields,
                   Q(**{self.lookup_field: lookup_value}))

        return get_object_or_404(queryset, q)


__all__ = (
    'ExtraLookupFieldsViewSetMixin',
)