django - Abfragefilter für viele ist leer


91

In Django gibt es eine Möglichkeit, nach vielen Feldern zu filtern, die leer oder null sind.

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)

Antworten:


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

40
Und das Gegenteil ist möglich mitTestModel.objects.exclude(manytomany=None)
Alex L

Gibt es eine Möglichkeit, nicht verwandte / nicht verbundene Objekte im 'AnotherModel' abzufragen? Der Versuch, viele bis viele Modelle aufzuräumen.
Bozdoz

2
Verwenden AnotherModel.objects.filter(testmodel_set=None)hat bei mir funktioniert. Wenn Sie einen verwandten Namen verwenden , sollten Sie diesen natürlich stattdessen verwenden.
Felipe

6

Durch Hinzufügen zur Antwort von @Bernhard kann mit dem Q()Objekt eine andere mögliche Lösung erzielt werden .

from django.db.models import Q

filters = Q(manytomany=None)

TestModel.objects.filter(filters)

Negation:

filters = ~Q(manytomany=None)

TestModel.objects.filter(filters)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.