我有時需要確保某些實例從查詢集中排除。
這是我經常這樣做的方式:Django從查詢集中排除特定實例而不使用字段查找
unwanted_instance = MyModel.objects.get(pk=bad_luck_number)
uninteresting_stuff_happens()
my_results = MyModel.objects.exclude(id=unwanted_instance.id)
,或者,如果我有更多的人:
my_results = MyModel.objects.exclude(id_in=[uw_in1.id, uw_in2.id, uw_in3.id])
這種 '感覺' 有點笨重,所以我嘗試:
my_ideally_obtained_results = MyModel.objects.exclude(unwanted_instance)
哪一個不行。但我讀here on SO子查詢可以用作排除參數。
我運氣不好嗎?我錯過了一些功能(檢查文檔,但沒有找到任何有用的指針)
另外,如果你有個要排除的查詢集(例如'MyModel.objects.filter()'),你可以使用'ValuesQuerySet'來獲取id: 'id_dicts = MyModel.objects.filter()。values('id ')'然後 'query.exclude(id__in = [item ['id'] for item in id_dicts])''。 –
2013-11-18 00:11:51
差不多4年後,這個答案解決了我的問題。 :-) – Garfonzo 2014-03-18 18:48:21
我只是想給@ RacingTadpole的建議添加一些內容:您可以輕鬆使用'values_list(「id」,flat = True)'獲取所有ID的順序列表。然而,這會碰到數據庫,所以我建議使用Python的列表理解。 – stschindler 2014-07-04 10:13:34