django - le filtre de requête sur manytomany est vide


96

Dans Django, il existe un moyen de filtrer sur un champ manytomany vide ou nul.

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)

Réponses:


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

43
Et l'inverse est possible avecTestModel.objects.exclude(manytomany=None)
Alex L

Existe-t-il un moyen d'interroger des objets non liés / non attachés dans le 'AnotherModel'? Essayer de nettoyer un modèle plusieurs à plusieurs.
bozdoz

2
L'utilisation a AnotherModel.objects.filter(testmodel_set=None)fonctionné pour moi. Si vous utilisez un nom associé , vous devriez bien sûr l'utiliser à la place.
Felipe

6

En plus de la réponse @Bernhard, une autre solution possible peut être obtenue en utilisant l' Q()objet.

from django.db.models import Q

filters = Q(manytomany=None)

TestModel.objects.filter(filters)

Négation:

filters = ~Q(manytomany=None)

TestModel.objects.filter(filters)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.