如何编写QuerySet语法让字段包含列表中的项?

2024-05-01 07:40:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道在Django中,我可以使用__icontains查询数据库使用LIKE

name = "joe"

Q(name__icontains=name)

但如果我有一份清单:

name_list = ["joe", "klare"]

如何编写QuerySet语法,使名称包含“joe”或“klare”


2条回答

通过创建多个条件:

filters = Q()
for name in name_list:
    filters |= Q(name__icontains=name)

queryset.filter(filters)

如果定期使用不同属性进行此类查询,请为此类操作创建通用函数

def generate_property_in_list_query(property_name, list_items):
    query = None
    for item in list_items:
        filter_query = Q(**{"{}__icontains".format(property_name): item})
        query = filter_query if not query else query | filter_query
    return query

现在,您可以为namelike创建查询

generate_property_in_list_query("name", ["joe", "klare"])

模型过滤器操作将是

Model.objects.filter(generate_property_in_list_query("name", ["joe", "klare"]))

如果我们想搜索其他属性,只需更改属性名称

相关问题 更多 >