Django queryset аннотирует, если SearchQuery найден в поле

У меня есть такая модель: (С триггером в Postgres, который заполняет vector_column)

class Article(models.Model)
   content = models.TextField()
   vector_column = SearchVectorField(null=True)

Я запрашиваю эту модель следующим образом:

Article.objects.filter(
   Q(
      vector_column=SearchQuery(
         "cat", config="english", search_type="phrase"
      ) |
      vector_column=SearchQuery(
         "dog", config="english", search_type="phrase"
      )
    )
)

Так он отфильтрует все статьи с "dog" и "cat" в содержании.

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

Оптимальный выход был бы примерно таким:

[
   {
       "content": "cats",
       "words_found": ["cat"]
   },
   {
       "content": "dogs",
       "words_found": ["dog"]
   },
   {
       "content": "dogs and cats",
       "words_found": ["dog", "cat"]
   }
]
Вернуться на верх