django - manytomany上的查询过滤器为空

Joh*_*ohn 79 django django-queryset

在Django中有一种方法可以过滤多个字段为空或空.

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)
Run Code Online (Sandbox Code Playgroud)

Ber*_*ant 126

print TestModel.objects.filter(manytomany=None)
Run Code Online (Sandbox Code Playgroud)

  • 并且可以使用`TestModel.objects.exclude(manytomany = None)`进行反转 (36认同)
  • 使用`AnotherModel.objects.filter(testmodel_set=None)` 对我有用。如果您使用 [相关名称](https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects),您当然应该使用它。 (2认同)

Rak*_*kmo 10

添加到@Bernhard 答案中,可以使用该Q()对象实现其他可能的解决方案。

from django.db.models import Q

filters = Q(manytomany=None)

TestModel.objects.filter(filters)
Run Code Online (Sandbox Code Playgroud)

否定:

filters = ~Q(manytomany=None)

TestModel.objects.filter(filters)
Run Code Online (Sandbox Code Playgroud)