Можно ли объединить QuerySets?

После поиска базы данных я получаю массив запросов. Я хотел бы объединить эти запросы так, как мы можем делать с элементами списка. Возможно ли это или, может быть, лучший способ сделать это? Конечной целью здесь является получение запроса для строк таблицы, содержащих один из набора строк в поле.

for i in range(0,(searchDiff+1)): filterString = str(int(searchRange[0]) + i) myQuerySetTwoD.append(my.objects.filter(asn=filterString)) for j in range(0,(len(myQuerySetTwoD)-1)): myQuerySet = myQuerySet + myQuerySetTwoD[j] 

ОБНОВЛЕНИЕ: нашел свой собственный ответ (возможно, что-то о написании вопроса)

Просто

 from itertools import chain 

затем замените

 myQuerySet = myQuerySet + myQuerySetTwoD[j] 

с

 BgpAsnList = chain(BgpAsnList,BgpAsnListTwoD[j]) 

2 Solutions collect form web for “Можно ли объединить QuerySets?”

Ваш код выглядит странно! Я понятия не имею, как это работает и что вы здесь делаете, но вот как я буду делать запрос:

 from django.db.models import Q myQuery = Q() for i in range(0,(searchDiff+1)): filterString = str(int(searchRange[0]) + i) myQueryTwoD.append(Q(asn=filterString)) for j in range(0,(len(myQueryTwoD)-1)): myQuery = myQuery | myQueryTwoD[j] myQuerySet = my.objects.filter(myQuery) 

Как это работает?

 Blagh.objects.filter(Q(smth='A') | Q(smth='B')) will generate query which looks like: SELECT ... from blagh WHERE smth = 'A' OR smth = 'B' 

Взгляните и django docs: сложные поисковые запросы с объектом Q

Ваш метод с помощью itertools приведет к множеству запросов к базе данных. С моим решением это будет один запрос с OR lookup в WHERE .

Обновить:

Возможно, даже лучшее решение будет примерно таким:

 strings = [] for i in range(0,(searchDiff+1)): filterString = str(int(searchRange[0]) + i) strings.append(filterString) my_query_set = MyModel.objects.filter(arn__in=strings) 

Я не понимаю, зачем вам эти внутренние петли …

Я думаю, что правильный способ сделать это – использовать | (т. е. если QuerySet имеют один и тот же тип):

 qset = MyModel.objects.none() for filterString in list_of_filterStrings: qset_temp = MyModel.objects.filter(asn=filterString) qset = qset | qset_temp 
  • Nginx, django, gunicorn, ubuntu 14.04 (13: Разрешение отказано) при подключении к восходящему потоку
  • Как отключить поле модели в форме django
  • Использование Django South для перехода от конкретного наследования к абстрактному наследованию
  • GqlQuery OrderBy свойство в ReferenceProperty
  • Поле auto-increment Django BigInteger в качестве первичного ключа?
  • Добавьте n задач в очередь сельдерея и дождитесь результатов
  • Общий / Глобальный словарь в Django Между URL-адресами и Контекст-процессором
  • Недопустимый файл требований.txt для развертывания приложения django для aws beanstalk
  • Python - лучший язык программирования в мире.