次のコードがある場合:
class A(models.Model):
.....
class B(models.Model):
a = models.ManyToManyField(A)
次のクエリは異なる結果を取得します。
B.objects.exclude(a__in=[7])
from django.db.models import Q
B.objects.exclude(Q(a__in=[7]))
結果:
- 最初のクエリは、a=7 の「b オブジェクト」を除くすべてのオブジェクトを取得します。大丈夫です
- しかし、2 番目のクエリは、a=7 または a=None の「b オブジェクト」を除くすべてのオブジェクトを取得します。
エラーですか?、既知ですか?
詳細な例を追加し、次のコードを実行します
from django.contrib.auth.models import User, Group
u1 = User.objects.create(username='u1')
u2 = User.objects.create(username='u2')
u3 = User.objects.create(username='u3')
g1 = Group.objects.create(name='g1')
g2 = Group.objects.create(name='g2')
u1.groups.add(g1)
u2.groups.add(g2)
print User.objects.exclude(groups__in=[g1.pk])
print User.objects.exclude(Q(groups__in=[g1.pk]))