Dan*_*man 40
根据您对Ned的回复,听起来您只想排除标签列表.所以你可以使用in
过滤器:
names_to_exclude = [o.name for o in objects_to_exclude]
Foo.objects.exclude(name__in=names_to_exclude)
Run Code Online (Sandbox Code Playgroud)
这样做你想要的吗?
多次调用 exclude 有什么问题?查询是惰性的,在您尝试从中提取数据之前不会发生任何事情,因此多次使用 .exclude() 没有任何缺点。
你也可以尝试这个。
exclude_list = ['A', 'B', 'C']
qs = Foo.objects.exclude(items__in=exclude_list)
你可以很容易地用Q 对象做到这一点:
from django.db.models import Q
excludes = None
for tag in ignored_tags:
q = Q(tag=tag)
excludes = (excludes and (excludes | q)) or q # makes sure excludes is set properly
set_minus_excluded = Foo.objects.exclude(excludes)
Run Code Online (Sandbox Code Playgroud)
您还应该能够使用 exclude() 动态执行此操作:
qs = Foo.objects.all()
for tag in ignored_tags:
qs = qs.exclude(tag=tag)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18152 次 |
最近记录: |