Должен ли я использовать 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().
Но я не знаю, подходит ли она в данном случае.
Есть ли какая-нибудь идея получше?
Если этот запрос используется многими пользователями, скорость ответа будет очень низкой...