Оптимизация запросов Django: можно ли получать значения в группах? - PullRequest
0 голосов
/ 01 августа 2011

У меня есть:

active = Node.objects.filter(status = 'a')
potential = Node.objects.filter(status = 'p')
hotspot = Node.objects.filter(status = 'h')

Мне интересно: возможно ли сделать это лучше?

РЕДАКТИРОВАТЬ: возможно, я не очень хорошо себя объяснил.Мне нужно иметь 3 списка с 3 различными статусами.Если я сделаю всего 1 запрос, мне придется перебрать список, чтобы создать 3 новых списка, но если список очень длинный, не будет ли это неэффективным?

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Еще лучше, используйте in:

Node.objects.filter(status__in=['a', 'p', 'h'])

Редактировать после комментария Не знаю, почему это было бы неэффективно. Возможно, одним из улучшений было бы добавление .order_by('status'), чтобы вы получили упорядоченный набор запросов, а затем разбили его при выполнении итерации. Вероятно, это будет микрооптимизация.

1 голос
/ 01 августа 2011

Посмотрите на объекты Django Q

from django.db.models import Q;

Node.objects.filter(Q(status = 'a') | Q(status = 'p' | Q(status = 'h'))

Источник: https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...