假設我有一個定義的模型對象'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