如何在函数中使用带有生成器类查询集结果的python 'in'运算符?



我需要检查是否有<类"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'>

当我试图将查询集结果作为函数中的参数传递时,问题就出现了:

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))

我是否正确地传递了视图中的查询集结果,或者类生成器值不应该以这种方式使用?

我使用迭代器((的原因是:我需要一个闪电般快速、无缓存的查询,每个延迟都会影响我的应用程序。通过使用迭代器((,不存在文档中所述的重复查询或缓存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()

最新更新