diff --git a/_modules/apis_core/apis_entities/filtersets.html b/_modules/apis_core/apis_entities/filtersets.html index 4c793ec8c..42d398da4 100644 --- a/_modules/apis_core/apis_entities/filtersets.html +++ b/_modules/apis_core/apis_entities/filtersets.html @@ -93,9 +93,12 @@

Source code for apis_core.apis_entities.filtersets

 import django_filters
 from django.db import models
+from django.db.models import Q, Case, When
 from apis_core.generic.filtersets import GenericFilterSet, GenericFilterSetForm
-from apis_core.apis_relations.models import Property
+from apis_core.apis_relations.models import Property, Triple
 from apis_core.generic.helpers import generate_search_filter
+from apis_core.apis_entities.utils import get_entity_classes
+from apis_core.apis_metainfo.models import RootObject
 
 ABSTRACT_ENTITY_FILTERS_EXCLUDE = [
     "rootobject_ptr",
@@ -127,8 +130,25 @@ 

Source code for apis_core.apis_entities.filtersets

+ entities = get_entity_classes() + q = Q() + for entity in entities: + name = entity._meta.model_name + q |= Q(**{f"{name}__isnull": False}) & generate_search_filter( + entity, value, prefix=f"{name}__" + ) + all_entities = RootObject.objects_inheritance.filter(q).values_list("pk", flat=True) + t = ( + Triple.objects.filter(Q(subj__in=all_entities) | Q(obj__in=all_entities)) + .annotate( + related=Case( + When(subj__in=all_entities, then="obj"), + When(obj__in=all_entities, then="subj"), + ) + ) + .values_list("related", flat=True) + ) + return queryset.filter(pk__in=t)
diff --git a/_modules/apis_core/generic/helpers.html b/_modules/apis_core/generic/helpers.html index 897f3df61..1e4b1552a 100644 --- a/_modules/apis_core/generic/helpers.html +++ b/_modules/apis_core/generic/helpers.html @@ -103,13 +103,16 @@

Source code for apis_core.generic.helpers

 
 
[docs] -def generate_search_filter(model, query, fields_to_search=None): +def generate_search_filter(model, query, fields_to_search=None, prefix=""): """ Generate a default search filter that searches for the `query` in all the CharFields and TextFields of a model (case-insensitive) or in the fields listed in the `fields_to_search` argument. This helper can be used by autocomplete querysets if nothing fancier is needed. + If the `prefix` is set, the field names will be prefixed with that string - + this can be useful if you want to use the `generate_search_filter` in a + `Q` combined query while searching over multiple models. """ query = query.split() @@ -128,7 +131,8 @@

Source code for apis_core.generic.helpers

 
     for token in query:
         q &= functools.reduce(
-            lambda acc, field_name: acc | Q(**{f"{field_name}__icontains": token}),
+            lambda acc, field_name: acc
+            | Q(**{f"{prefix}{field_name}__icontains": token}),
             fields_to_search,
             Q(),
         )
diff --git a/htmlcov/class_index.html b/htmlcov/class_index.html
index 5df31efed..20afdffa6 100644
--- a/htmlcov/class_index.html
+++ b/htmlcov/class_index.html
@@ -55,7 +55,7 @@ 

coverage.py v7.5.3, - created at 2024-06-19 06:19 +0000 + created at 2024-06-19 09:30 +0000

@@ -265,24 +265,24 @@

100% - apis_core/apis_entities/filtersets.py - AbstractEntityFilterSetForm + apis_core/apis_entities/filtersets.py + AbstractEntityFilterSetForm 0 0 0 100% - apis_core/apis_entities/filtersets.py - AbstractEntityFilterSet + apis_core/apis_entities/filtersets.py + AbstractEntityFilterSet 0 0 0 100% - apis_core/apis_entities/filtersets.py - AbstractEntityFilterSet.Meta + apis_core/apis_entities/filtersets.py + AbstractEntityFilterSet.Meta 0 0 0 @@ -291,10 +291,10 @@

apis_core/apis_entities/filtersets.py (no class) - 17 - 17 + 20 + 20 0 - 0% + 0% apis_core/apis_entities/forms.py @@ -2877,10 +2877,10 @@

Total   - 2441 - 1022 + 2444 + 1025 0 - 58% + 58% @@ -2892,7 +2892,7 @@

coverage.py v7.5.3, - created at 2024-06-19 06:19 +0000 + created at 2024-06-19 09:30 +0000

@@ -193,28 +193,28 @@

100% - apis_core/apis_entities/filtersets.py - related_property + apis_core/apis_entities/filtersets.py + related_property 3 3 0 0% - apis_core/apis_entities/filtersets.py - related_entity - 2 - 2 + apis_core/apis_entities/filtersets.py + related_entity + 8 + 8 0 - 0% + 0% apis_core/apis_entities/filtersets.py (no function) - 17 - 17 + 20 + 20 0 - 0% + 0% apis_core/apis_entities/forms.py @@ -2273,48 +2273,48 @@

0% - apis_core/generic/helpers.py - mro_paths + apis_core/generic/helpers.py + mro_paths 4 4 0 0% - apis_core/generic/helpers.py - template_names_via_mro + apis_core/generic/helpers.py + template_names_via_mro 2 2 0 0% - apis_core/generic/helpers.py - permission_fullname + apis_core/generic/helpers.py + permission_fullname 2 2 0 0% - apis_core/generic/helpers.py - module_paths + apis_core/generic/helpers.py + module_paths 3 3 0 0% - apis_core/generic/helpers.py - import_string + apis_core/generic/helpers.py + import_string 4 4 0 0% - apis_core/generic/helpers.py - first_member_match + apis_core/generic/helpers.py + first_member_match 7 7 0 @@ -3853,10 +3853,10 @@

Total   - 3210 - 1607 + 3219 + 1616 0 - 50% + 50% @@ -3868,7 +3868,7 @@

coverage.py v7.5.3, - created at 2024-06-19 06:19 +0000 + created at 2024-06-19 09:30 +0000

@@ -121,10 +121,10 @@

apis_core/apis_entities/filtersets.py - 22 - 22 + 31 + 31 0 - 0% + 0% apis_core/apis_entities/forms.py @@ -1089,10 +1089,10 @@

Total - 3210 - 1607 + 3219 + 1616 0 - 50% + 50% @@ -1104,7 +1104,7 @@

coverage.py v7.5.3, - created at 2024-06-19 06:19 +0000 + created at 2024-06-19 09:30 +0000