首页 > 解决方案 > Django 查询集包含

问题描述

我的代码是

queryset = Product.objects.filter(category=2)
for i in queryset:
    for j in Windows_system_apps:
        if i.name in j:
            i.app_type = 1
            i.save()

pattern = ["alpha123", "delta1", ... ]

对于产品模型,我必须检查产品名称是否包含模式,其中模式是列表类型。

我的问题是我可以使用 __contains 和 __in 过滤器实现上述逻辑吗?

标签: pythondjango

解决方案


给定name是 a CharField,并且Windows_system_apps是字符串集合的集合,您可以将__in[Django-doc]用于:

from itertools import chain

Product.objects.filter(category=2, name__in=chain.from_iterable(Windows_system_apps))

如果您想更改app_type, 并且这app_type又是一个“原始”数据库字段,您可以在一个查询中执行此操作,例如:

from itertools import chain

Product.objects.filter(
    category=2, name__in=chain.from_iterable(Windows_system_apps)
).update(app_type=1)

这将导致类似的问题:

UPDATE product
SET app_type=1
WHERE category=2 AND name IN ("foo", "bar")

和列表"foo"假设元素"bar"Windows_system_apps


推荐阅读