假设我有一个定义的模型对象'Person',它有一个名为'Name'的字段。我有一个人名单:我可以使用python列表过滤django模型吗?
l = ['Bob','Dave','Jane']
我想回的所有人员记录一个列表,其中的第一个名字是不在1所定义的名称列表。
这样做的最pythonic方式是什么?
编辑:想到它后,我真正想要做的是拿出一个子列表l 不是存在人表中。有没有这样做的有效方式?我可以想到几种方法,但不确定效率如何。
假设我有一个定义的模型对象'Person',它有一个名为'Name'的字段。我有一个人名单:我可以使用python列表过滤django模型吗?
l = ['Bob','Dave','Jane']
我想回的所有人员记录一个列表,其中的第一个名字是不在1所定义的名称列表。
这样做的最pythonic方式是什么?
编辑:想到它后,我真正想要做的是拿出一个子列表l 不是存在人表中。有没有这样做的有效方式?我可以想到几种方法,但不确定效率如何。
重命名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)
是的,“右侧”的差异(但没有t' - ')接受任何可迭代的(我必须look it up来确认)。
这应该工作:
Person.objects.exclude(name__in=['Bob','Dave','Jane'])
把“高效”,“正确”和“做我所需要的”放在第一位是可以的。这听起来很陈词滥调,但我学习Python越多,似乎是“pythonic”的一个方面。 C的惯例在历史上被认为是“正确的”和“高效的”;由于Python构造不太明显地转换为机器翻译,所以语言一直在改变我优先考虑这两者的方式。 – msw 2010-04-03 05:13:35