From 521e86dcc36b70bedba5ec06fb939463ef53c952 Mon Sep 17 00:00:00 2001
From: dcz <dcz@ipipan.waw.pl>
Date: Tue, 5 Sep 2023 11:31:39 +0200
Subject: [PATCH] attach free lu having slowal frames

---
 entries/views.py | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/entries/views.py b/entries/views.py
index cef9e17..af32964 100644
--- a/entries/views.py
+++ b/entries/views.py
@@ -1096,18 +1096,28 @@ def ajax_synsets(request, base, pos):
     return context
 
 
+def lexical_units_without_empty_frames(obj_results):
+    for lu in obj_results.all():
+        lu._frames = lu._frames[0] if lu._frames and len(lu._frames) > 0 else None
+        if lu._frames is None:
+            continue
+        else:
+            yield lu
+
+
 @ajax(method='get', encode_result=True)
 def ajax_free_slowal_frame_lookup(request, term):
-    results = []
     if len(term) > 0:
-        obj_results = LexicalUnit.objects.filter(base__startswith=term).filter(frames__assignments=None)
-        results = get_ordered_lexical_units_synsets(obj_results)
-    return {'result': results}
-
+        obj_results = LexicalUnit.objects.filter(base__startswith=term)\
+            .filter(frames__assignments=None).order_by('base', 'sense')
+        obj_results = obj_results.prefetch_related(
+                Prefetch(
+                    "frames",
+                    to_attr="_frames",
+                )
+        )
+        lexical_unit_str = []
+        for lexical_unit in lexical_units_without_empty_frames(obj_results):
+            lexical_unit_str.append(str(lexical_unit))
+    return {'result': lexical_unit_str}
 
-def get_ordered_lexical_units_synsets(lexical_units_query):
-    lexical_unit_bases = []
-    ordered_lexical_units = lexical_units_query.order_by('base', 'sense')
-    for lexical_unit in ordered_lexical_units:
-        lexical_unit_bases.append(str(lexical_unit))
-    return lexical_unit_bases
-- 
GitLab