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