Должен ли я использовать join query или subquery в Django ORM?

Я составил программу согласования.

Основываясь на примере, который я провалил,
. Я хочу получить список, который будет похож на список пользователя 1. Список должен исключать пользователей, которые имеют реакцию пользователя 1.

class Like(models.Model):
    from_user = models.ForeignKey(User, related_name='from_user', on_delete=models.CASCADE)
    to_user = models.ForeignKey(User, related_name='to_user', on_delete=models.CASCADE)
[ Like ]
from_user | to_user |
    2     |    1    |
    3     |    1    |
    4     |    1    |
    5     |    1    |
    6     |    1    |
    7     |    1    |
    1     |    3    |
    1     |    4    |

[ Result ]
from_user | to_user |
    2     |    1    |
    5     |    1    |
    6     |    1    |
    7     |    1    |

3 и 4 пользователь имеют реакцию пользователя 1,
Поэтому они исключаются.

И вот какой запрос я составил.
Я знаю, что это неэффективный способ.

users = User.objects.filter(
    id__in=Subquery(
        Like.objects.filter(to_user=request.user.id).exclude(
            id__in=Subquery(
                Like.objects.filter(
                    from_user=request.user.id,
                    to_user__in=Subquery(
                        Like.objects.filter(to_user=request.user.id).values('from_user')
                    )
                ).values('id')
            )
        ).values('from_user')
    )
)

Я нашел функцию FilteredRelation().
Но я не знаю, подходит ли она в данном случае.
Есть ли какая-нибудь идея получше?

Если этот запрос используется многими пользователями, скорость ответа будет очень низкой...

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