Django Orm是否有更好的查询?
我进行了查询。但是我认为我太多使用了子查询。
您认为这不是很糟糕的查询吗?还是我应该在django orm函数中使用不同的东西?
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 |
USER_ID具有1个ID
users = User.objects.filter(
id__in=Subquery(
Like.objects.filter(to_user=user_id).exclude(
from_user__in=Subquery(
Like.objects.filter(
from_user=user_id,
to_user__in=Subquery(
Like.objects.filter(to_user=user_id).values('from_user')
)
).values('to_user')
)
).values('from_user')
)
)
,我可以重复使用该子查询吗?因为我使用了两次相同的查询。
Like.objects.filter(to_user=user_id)
如果许多用户使用此查询,我认为响应速度将非常慢。
I made a query. But I think I too much use subquery.
Do you think it is quite not bad query? or should I use different things in Django ORM functions?
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 |
user_id has User 1 id
users = User.objects.filter(
id__in=Subquery(
Like.objects.filter(to_user=user_id).exclude(
from_user__in=Subquery(
Like.objects.filter(
from_user=user_id,
to_user__in=Subquery(
Like.objects.filter(to_user=user_id).values('from_user')
)
).values('to_user')
)
).values('from_user')
)
)
And can I reuse the subquery? Because I used the same query twice.
Like.objects.filter(to_user=user_id)
If this query is used by many users, I think response speed will be very slow.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论