簡體   English   中英

將過濾器鏈接在一起

[英]Chaining Filters together

鑒於以下內容:

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的等效?

查詢集的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)

您可以使用|=創建一個空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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM