从查询集中删除(过滤掉)对象

Han*_*ong 1 django django-orm

我想从我的查询集中删除 3 个对象。这在额外列表的帮助下工作,但我很确定应该有更好的方法来使用QuerySet API来做到这一点。但是我还没有弄清楚如何:

我在做什么:

ranks = Rank.objects.all()
remove_ranks = ['Field Marshall', 'Military Attache', 'Mercenary Recruiter']
new_ranks =[]

for rank in ranks:
    if not rank.name in remove_ranks:
        new_ranks.append(rank)
Run Code Online (Sandbox Code Playgroud)

我如何使用 Django API 做到这一点?

Dr.*_*lch 6

尝试

remove_ranks = ['Field Marshall', 'Military Attache', 'Mercenary Recruiter']
Rank.objects.exclude(name__in=remove_ranks)
Run Code Online (Sandbox Code Playgroud)

它有什么作用?

.exclude 是相反的 .filter

name__in 相当于 SQL 中的 IN 语句

这应该产生一个 sql 查询沿线的东西

Select * from rank where name not in ('Field Marshall', 'Military Attache', 'Mercenary Recruiter')
Run Code Online (Sandbox Code Playgroud)