от
Документы это родительская таблица. Абзацы - это дочерняя таблица. Пользователи фильтруют документы на основе различных критериев поиска. Затем я хочу аннотировать документы с определенными параграфами, отфильтрованными по текстовому запросу. Тот же текстовый запрос используется для фильтрации документов и ранжирования их (SearchRank). Это ранжирование делает необходимым начинать с документов и аннотировать их абзацами, а не начинать с абзацев и группировать их по документам. Postgresql способ конкатенации одного текстового поля из нескольких строк в параграфах будет следующим: SELECT array_to_string ( ARRAY ( ВЫБЕРИТЕ para.text ОТ абзаца ГДЕ документ id = '...' ЗАКАЗАТЬ по п. Номеру), ''); Я пытаюсь перевести это в кодировку Django. Я пробовал многочисленные подходы к Django, но безрезультатно. Я могу комментировать 1 пункт. Query_sum - это объект Q (), созданный из пользовательского ввода. результаты = Documents.filter (Query_sum) sub_paragraphs = Paragraphs.filter (Query_sum) .filter (document = OuterRef ('id')) results = results.annotate (абзацы = подзапрос (sub_paragraphs.values ('text') [: 1], output_field = TextField ())) Проблемы начинаются, когда я избавляюсь от нарезки [: 1]. results = results.annotate (абзацы = подзапрос (sub_paragraphs.values ('text'), output_field = TextField ())) Затем я получаю следующую ошибку: msgstr "более одной строки, возвращённой подзапросом, используемым как выражение". Чтобы исправить это, я попытался использовать ArrayAgg и StringAgg. Я сделал довольно беспорядок ;-) Набор запросов документов (результат) должен быть аннотирован либо списком соответствующих абзацев (ArrayAgg), либо строкой абзацев, разделенных любым разделителем (StringAgg). Есть идеи, как поступить? Я был бы чрезвычайно признателен              

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...