需要一个关于数据库查询优化的小建议

问题描述 投票:0回答:1

问题是关于代码优化,确切地说是-DB查询优化:

…
…
…

filter1 = Comment.objects.filter(foreignkey_to_model1__author=self.request.user,
                                 is_active=True)
filter2 = Comment.objects.filter(foreignkey_to_model2__author=self.request.user,
                                 is_active=True)
context["comments_by_user"] = filter1.union(filter2)[: 5]
return context

我觉得这个代码很糟糕,因为它包含2个查询+切片而不是数据库级别的过滤器。问题 - 是否有机会将其打包在1个查询中,以减少数据库的负载? (并使这个代码少搞糟......)谢谢

django django-orm
1个回答
2
投票

试试这个:

from django.db.models import Q

filter = Comment.objects.filter(
    Q(foreignkey_to_model1__author=self.request.user) | 
    Q(foreignkey_to_model2__author=self.request.user),
    is_active=True
)[:5]
© www.soinside.com 2019 - 2024. All rights reserved.