簡體   English   中英

Django按多對多字段過濾不起作用

[英]Django filter by many-to-many field doesn't work

有一個文章模型,它有多對多類別字段。 我想按該字段過濾它,但它沒有按我預期的那樣工作。 例如:

MyModel.objects.filter(categories__id__in = [0, 1, 2])

即使它沒有 id 為 2 的類別,它也會獲得類別為 0 和 1 的模型。我嘗試過這樣的事情:

MyModel.objects.filter(Q(categories__id = 0) & Q(categories__id = 1) & Q(categories__id = 2))

但它甚至不起作用。 如果它具有所有這些類別,它甚至不會獲得模型。

順便說一句,我不想使用超過 1 種過濾方法

那么,有沒有適合我的解決方案?

謝謝。

PS: django AND on Q 對多對多不起作用- 同樣的問題,但作者仍然沒有得到答案。

您可以計算它是否與三個Category匹配,因此只檢索三個匹配的項目:

from django.db.models import Count

MyModel.objects.filter(
    categories__id__in=[0, 1, 2]
).annotate(
    category_count=Count('categories')
).filter(category_count=3)

暫無
暫無

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

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