Source code for apis_core.apis_relations.filtersets

from django.contrib.contenttypes.models import ContentType
from django.db.models import Q
from django_filters import CharFilter, ModelMultipleChoiceFilter

from apis_core.apis_relations.models import Property
from apis_core.generic.filtersets import GenericFilterSet, GenericFilterSetForm

PROPERTY_EXCLUDES = [
    "self_contenttype",
    "property_class_uri",
    "rootobject_ptr",
]


[docs] class PropertyFilterSetForm(GenericFilterSetForm): columns_exclude = PROPERTY_EXCLUDES
[docs] class PropertySubjObjFilter(ModelMultipleChoiceFilter):
[docs] def get_queryset(self, request): return ContentType.objects.filter( pk__in=Property.objects.all().values(self.field_name) )
[docs] class PropertyFilterSet(GenericFilterSet): name_forward = CharFilter(lookup_expr="icontains") name_reverse = CharFilter(lookup_expr="icontains") subj_class = PropertySubjObjFilter() obj_class = PropertySubjObjFilter()
[docs] class Meta: form = PropertyFilterSetForm exclude = PROPERTY_EXCLUDES
[docs] class TripleFilterSet(GenericFilterSet): subj = CharFilter(method="subj_icontains") obj = CharFilter(method="obj_icontains") subj_class = PropertySubjObjFilter( label="Subj class", method="class_in", ) obj_class = PropertySubjObjFilter( label="Obj class", method="class_in", )
[docs] def subj_icontains(self, queryset, name, value): return queryset.filter(subj__name__icontains=value)
[docs] def obj_icontains(self, queryset, name, value): return queryset.filter(obj__name__icontains=value)
[docs] def class_in(self, queryset, name, value): # value is the list of contenttypes if value and name: name, _ = name.split("_") return queryset.filter(Q(**{f"{name}__self_contenttype__in": value})) return queryset
[docs] class HistoricalTripleFilterSet(TripleFilterSet): pass
[docs] class HistoricalTempTripleFilterSet(TripleFilterSet): pass