Django从查询中排除单个值

时间:2019-02-04 16:27:45

标签: django django-models

给出一个模型,让我坐上MyModel, 我想从中提取与某个条目关联的所有对象,并在某个字段中排除所有包含“ foo”世界的对象(比如说custom_name)。

我找到了以下解决方案:

all_entries = MyModel.objects.filter(entry=foo_entry)

for el in all_entries:
    if 'foo' in el.custom_name:
        all_entries.remove(el)

有一种更好,更高效的方法吗?

2 个答案:

答案 0 :(得分:2)

尝试一下:

all_entries = MyModel.objects.filter(entry=foo_entry).exclude(custom_name='foo')

修改

如果要排除包含 'foo'的项目,可以使用.exclude(custom_name__contains='foo')

contains区分大小写,因此不会排除自定义名称为'Foo'的行。如果您希望查询不区分大小写,则可以使用.exclude(custom_name__icontains='foo')

答案 1 :(得分:0)

使用Q对象

from django.db.models import Q
all_entries = MyModel.objects.filter(~Q(custom_name__contains='foo'),entry=foo_entry)

all_entries = MyModel.objects.filter(entry=foo_entry).exclude(custom_name__contains='foo')