mirror of https://github.com/interlegis/sapl.git
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
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]
|
|
|