Как использовать оператор python 'in' с генератором результатов класса queryset в функции?
Мне нужно проверить, существует ли значение <class 'str'> в списке, сгенерированном queryset. Это прекрасно работает при использовании в представлении.
my_string = 'Granny Smith'
my_query = Orchard.objects.all().values_list('apples', flat=True).iterator()
if my_string in my_query:
print('This works ok', type(my_string), type(my_query))
# Print: 'This works ok, <class 'str'>, <class 'generator'>
Проблема возникает, когда я пытаюсь передать результаты queryset в качестве параметра в функцию:
def my_function(queryset_data):
other_string = 'Granny Smith'
if other_string in queryset_data:
print('There is Belle de Boskoop in my q results.', type(other_string), type(queryset_data))
Правильно ли я передаю результаты кверисета из представления или значения генератора классов не предназначены для использования таким образом?
Причина, по которой я использую iterator(): Мне нужен молниеносный запрос без кэширования, каждая задержка вредит моему приложению. При использовании iterator() нет повторных запросов или кэширования, как сказано в документации https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.iterator.
Если вы просто хотите проверить, есть ли запись с совпадающей строкой, вы можете просто использовать:
my_string = 'Granny Smith'
# query of all Orchard record with apples='Granny Smith'
my_query = Orchard.objects.filter(apples=my_string)
# check if any record exists. Returns boolean
is_record_found = my_query.exists()