【发布时间】:2012-03-15 10:19:41
【问题描述】:
我有一个对组模型具有 FK 的项目模型。组有名称和另外两个字段:(bool) is_private 表示该组是否为私有,FK 到 django.auth.models.Group 表示该项目组可见的组成员身份。
有 100 个项目,不到 1 秒就被愉快地获取了:
def project_list(request):
parameters = {field_name: value for field_name, value in request.GET.items() if value and field_name in project._meta.get_all_field_names()}
all_projects = project.objects.select_related().filter(**parameters)
return all_projects
只有一个项目有一个私人组,一旦我添加隐私检查,获取它需要超过 4 秒的时间:
def project_list(request):
parameters = {field_name: value for field_name, value in request.GET.items() if value and field_name in project._meta.get_all_field_names()}
all_projects = project.objects.select_related().filter(**parameters)
for p in all_projects.filter(group__is_private = True):
if not request.user.groups.filter(name = p.group.private_group.name).exists():
all_projects = all_projects.exclude(id=p.id)
return all_projects
有没有办法重做以减少时间?
【问题讨论】:
标签: django performance django-models django-queryset