给出一个模型,让我坐上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)
有一种更好,更高效的方法吗?
答案 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')