python - 将过滤器链接在一起

标签 python django django-models django-queryset

鉴于以下情况:

instances = Catalog.objects.filter(
                                Q(imdb_url=imdb_url)
                               |Q(isan=isan)
                               |Q(amg_video_id=amg_video_id)
)

我如何按照以下格式执行相同的操作,将每个链接在一起:

instances = Catalog.objects.all()
if imdb_url:
    instances = instances.filter(imdb_url = imdb_url) # OR
if isan:
    instances = instances.filter(isan = isan) # OR
if amg:
    instances = instances.filter(amg = amg) # OR

上面给了我相当于:

instances = Catalog.objects.filter(imdb_url=imdb_url).filter(isan=isan).filter(amg=amg)

如何在第一个查询中执行与 Q 等效的操作?

最佳答案

您可以创建一个空的 Q 对象,并使用 |= 相应地与其他对象进行 OR:

q = Q()

if imdb_url:
    q |= Q(imdb_url=imdb_url)
if isan:
    q |= Q(isan=isan) 
if amg:
    q |= Q(amg=amg)

instances = Catalog.objects.filter(q)

关于python - 将过滤器链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26791269/

相关文章:

python - 从 Mongo 获取 dict 并使用 Numpy 转换为 ndarray

django - 无法覆盖 ModelForm (Django) 中的 SelectMultiple 小部件

python - Django 自定义查询集和导出

mysql - ValueError : Related model u'mutech. 分支'无法解析

python - Django:无法将模型中的用户配置文件数据插入模板中

python - SQL Where 子句和 Django 时区

python - Django-Piston 中的错误处理

django - 在 MongoEngine + Django 中添加数据

python - 从文本文件中读取 python 函数并将其分配给变量

jquery - NoReverseMatch at/product/pussyes/Reverse 找不到 'basket_adding'。 'basket_adding' 不是有效的 View 函数或模式名称