Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

50 lines
1.5 KiB

from django.db.models import Q
from django.http import Http404
from rest_framework.generics import ListAPIView, get_object_or_404
from rest_framework.permissions import IsAuthenticated
from rest_framework.viewsets import ModelViewSet
from sapl.api.serializers import ChoiceSerializer
from sapl.base.models import Autor, TipoAutor
from sapl.utils import SaplGenericRelation
class TipoAutorContentOfModelContentTypeView(ListAPIView):
serializer_class = ChoiceSerializer
# FIXME aplicar permissão correta de usuário
permission_classes = (IsAuthenticated,)
queryset = TipoAutor.objects.all()
model = TipoAutor
pagination_class = None
def get_queryset(self):
queryset = ModelViewSet.get_queryset(self)
if not self.kwargs['pk']:
return queryset
obj = get_object_or_404(queryset, pk=self.kwargs['pk'])
if not obj.content_type:
raise Http404
q = self.request.GET.get('q', '').strip()
model_class = obj.content_type.model_class()
fields = list(filter(
lambda field: isinstance(field, SaplGenericRelation) and
field.related_model == Autor,
model_class._meta.get_fields(include_hidden=True)))
assert len(fields) == 1
fields_search = fields[0].fields_search
if q:
q_filter = Q()
for fs in fields_search:
q_filter |= Q(**{'%s__icontains' % fs: q})
return model_class.objects.filter(q_filter)[:10]
else:
return model_class.objects.all()[:10]