Repository URL to install this package:
Version:
0.2.0a4 ▾
|
dj-kaos-utils
/
rest.py
|
---|
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',
)