鉴于以下内容:
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
的等效?
答案 0 :(得分:1)
查询集的union运算符为|
instances = Catalog.objects.none()
if imdb_url:
instances |= instances.filter(imdb_url=imdb_url)
if isan:
instances |= instances.filter(isan=isan)
if amg:
instances |= instances.filter(amg=amg)
答案 1 :(得分:1)
您可以使用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)