django-manytomanyのクエリフィルターが空です


96

Djangoには、空またはnullのmanytomanyフィールドをフィルタリングする方法があります。

class TestModel(models.Model):
    name = models.CharField(_('set name'), max_length=200)
    manytomany = models.ManyToManyField('AnotherModel', blank=True, null=True)

print TestModel.objects.filter(manytomany__is_null=True)

回答:


152
print TestModel.objects.filter(manytomany=None)

43
そしてその逆は可能ですTestModel.objects.exclude(manytomany=None)
Alex L

'AnotherModel'で無関係/アタッチされていないオブジェクトをクエリする方法はありますか?多対多のモデルをクリーンアップしようとしています。
bozdoz 2014年

2
使用AnotherModel.objects.filter(testmodel_set=None)は私のために働いた。関連する名前を使用している場合は、もちろん代わりにそれを使用する必要があります。
フェリペ

6

@Bernhardの回答に加えて、Q()オブジェクトを使用して他の可能な解決策を実現で​​きます。

from django.db.models import Q

filters = Q(manytomany=None)

TestModel.objects.filter(filters)

否定:

filters = ~Q(manytomany=None)

TestModel.objects.filter(filters)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.