Аннотирование набора запросов с объектами из другого набора запросов «фильтра» - PullRequest
1 голос
/ 18 июня 2019

Если вы фильтруете набор запросов, используя значения из другого набора запросов, каков наилучший способ аннотировать значение «фильтра» в исходном наборе запросов?

Например, ниже у меня есть QS simGrants, который я фильтрую, используя QS simKeys. Когда совпадение найдено, я бы хотел добавить соответствующий косинус-символ simKeys к объекту simGrants.

База данных довольно большая, поэтому я ищу наиболее эффективный способ сделать это.

Simkeys =similarity_matrix.objects.filter(y_axis__in=profiles).filter(cosine_score__gt=0)
simGrants = Grant.objects.filter(indexKey__in=simKeys)

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете аннотировать ваш Grant объект с полями из связанной модели с помощью выражения F [Django-doc] .Это приводит к тому, что запрос выглядит следующим образом:

from django.db.models import <b>F</b>

Grant.objects.annotate(
    <b>cosine_score=F('similarity_matrix__cosine_score')</b>
).filter(
    similarity_matrix__y_axis__gt=0,
    similarity_matrix__cosine_score__gt=0
)

Объекты Grant, которые возникают из этого набора запросов, будут иметь дополнительный атрибут cosine_score, который является cosine_score связанного объекта similarity_matrix.

...