gpt4 book ai didi

Django 。我如何优化数据库查询?

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:36 25 4
gpt4 key购买 nike

我有两个模型:

class Status(models.Model): 

CHOISES = (
('new', 'New'),
('in_progress', 'InProgress'),
('on_review', 'OnReview'),
('tested', 'Tested'),
('delivered', 'Delivered')
)

status_type = models.CharField(
max_length=11,
choices=CHOISES,
primary_key=True)

class Task(models.Model):
name = models.CharField(max_length=200, blank=False)
status = models.ForeignKey(status)

我的部分观点:

def task_list(request):

all_tasks = Task.objects.all()
tasks = {}

tasks['new'] = all_tasks.filter(status_id='new')
tasks['in_progress'] = all_tasks.filter(status_id='in_progress')
tasks['on_review'] = all_tasks.filter(status_id='on_review')
tasks['tested'] = all_tasks.filter(status_id='tested')
tasks['delivered'] = all_tasks.filter(status_id='delivered')
....

我的模板的一部分:

{% for item in new %}
<div id="{{ item.pk }}">
{{ item.name }}
</div>
{% endfor %}
</div>
{% for item in in_progress %}
<div id="{{ item.pk }}">
{{ item.name }}
</div>
{% endfor %}
.....

问题是,有没有办法优化我所有的查询集,或者不可能为一个数据库调用选择五个过滤器?
据我所知,如果我只在 View 中保存此调用 all_tasks = Task.objects.all() 然后将逻辑放入模板中,如下所示:

{% for item in all_task %}
{% if item.status_id == "new" %}
....

它也将是 exaclty 五个电话
希望我的问题不是太宽泛

最佳答案

只需按 View 中的状态对任务进行分组:

from itertools import groupby

def task_list(request):
all_tasks = Task.objects.select_related('status').order_by('status')
tasks = {status: list(tasks)
for status, tasks
in groupby(all_tasks, lambda x: x.status)}

并在您的模板中使用它们,例如:

{% for task in tasks.new %}
{{ task }}
{% endfor %}

关于 Django 。我如何优化数据库查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35010962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com