Можно ли объединить 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 
  • Преобразование даты и времени UTC в локальную дату и время пользователя
  • использование Dropbox в качестве сервера для моего приложения django
  • Недопустимый токен Django - CSRF
  • перенаправить пользователя после обновления в представлении на основе класса в django
  • как показать поле модели модели Django как неотредактированное
  • Учебник Django: ошибка запуска сервера
  • Django ajax HttpResponse json error Неожиданный токен d
  • Nginx не служит для изображения django
  • Python - лучший язык программирования в мире.