鉴于以下情况:
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/