我可以用Python列表过滤Django模型吗?
假设我有一个叫做“Person”的模型对象,这个对象里有一个字段叫“Name”。然后我有一个人名的列表:
l = ['Bob','Dave','Jane']
我想要找出所有“Person”记录中,名字不在这个列表l里的记录。
用Python最好的方法是什么呢?
补充说明:经过思考,我其实想要的是从列表l中找出那些不在“Person”表里的名字。有没有什么高效的方法可以做到这一点?我能想到几种方法,但不太确定哪种更有效。
2 个回答
4
这个代码应该可以正常工作:
Person.objects.exclude(name__in=['Bob','Dave','Jane'])
意思是从“Person”这个对象中排除掉名字是“Bob”、“Dave”和“Jane”的人。
3
为了让代码更容易理解,把 l
改个名字:
names = ['Bob','Dave','Jane']
Person.objects.[exclude][1](Name__[in][2]=names)
更新 1: 对第二个问题的回答(在你的'编辑'段落中):
present = Person.objects.values_list('Name', flat=True)
absent = set(names) - set(present)
# or, if you prefer named functions to the set operator '-'
absent = set(names).difference(present)
是的,差异的“右边”部分(但不是'-')可以接受任何可迭代的对象(我查了一下文档来确认这一点)。