Django внутреннее объединение с поисковыми запросами для таблиц с отношениями "многие-ко-многим

У меня есть динамический иерархический интерфейс расширенного поиска, который я создал. По сути, он позволяет вам искать термины примерно в 6 или 7 таблицах, связанных между собой, которые могут быть и'и или'и в любой комбинации. Записи поиска в форме компилируются в выражение Q.

Сегодня я обнаружил проблему. Если я предоставляю термины для подтаблиц, которые (где-то на линии внешних ключей) находятся в отношениях "многие ко многим", выходная таблица будет включать результаты из этой таблицы, которые не соответствуют термину.

Моя проблема может быть воспроизведена в shell с помощью простого запроса:

qs = PeakGroup.objects.filter(msrun__sample__animal__studies__id__exact=3)
sqs = qs[0].msrun.sample.animal.studies.all()
sqs.count()
#result: 2

В sqs id включены 1 и 3, хотя я искал только по 3.

Я надеюсь, что мне не придется полностью переписывать свой интерфейс, чтобы сделать тип объединения, который только извлекает запись и связывает с исследованием id 3. Есть ли способ сделать такое внутреннее объединение как результат одного выражения Q в фильтре на весь набор связанных дублей, поля которых находятся в результирующей html-таблице в шаблоне?

Готов поспорить, что это невозможно без серьезной переработки, которой я хотел бы избежать, поскольку этот интерфейс расширенного поиска используется для нескольких наборов связанных таблиц "составных" представлений.

Вернуться на верх