У меня есть две модели:Django. Как я могу оптимизировать db-запрос?
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 %}
.....
Вопрос заключается в том, есть ли способ, чтобы оптимизировать все мои запросов или невозможно выбрать пять фильтров для одного вызова db?
Как я понимаю, если я сохранить в виде только этот вызов all_tasks = Task.objects.all()
, а затем положить логику в шаблоне, например:
{% for item in all_task %}
{% if item.status_id == "new" %}
....
будет exaclty пяти звонков слишком
Надеются, что мой вопрос не является слишком широким
большой! Спасибо. Может быть, это глупый вопрос, но как я могу теперь получить объекты задачи в шаблоне? Мне не нужен список заказов с объектами один за другим. Мне нужно поместить объекты в пять столбцов для каждого состояния, например, в trello.com, поэтому мне нужно некоторое условие. Если я использую тег '{% if%}' для имени статуса проверки, это будет вызов db в любом случае? –
Queryset должен быть 'Task.objects.select_related ('status'). Order_by ('status')'. В этом случае дополнительных запросов db не будет. – vsd
@AlexMorozov благодарит много! –