Как использовать оператор 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()
Вернуться на верх