2014-03-06 150 views
2

我需要知道刪除模型實例的最佳方法。Django模型刪除:實例vs查詢集刪除

實例刪除例如:

myModel = MyModel.objects.get(id=1) 
myModel.delete() 

查詢集刪除例如:

MyModel.objects.filter(id=1).delete() 

什麼是VS 查詢集刪除技術例如之間的區別是什麼? 使用查詢集而不是實例刪除是否有任何副作用?反之亦然?

P.S.如果你認爲你的答案是特定於版本的,假設我要求Django> = 1.6

回答

2

實例刪除涉及兩個查詢:一個用於選擇對象。其他用於刪除對象。

雖然Queryset刪除只涉及一個查詢:刪除。

實例刪除的副作用:myModel.pk(== myModel.id正常)在刪除後變成None

+0

它是否對「子級」表上的「級聯」刪除有任何影響;即與模型相關的其他表中的行是否被刪除? –

+0

@JosvicZammit,是的。根據[文檔](https://docs.djangoproject.com/en/1.6/topics/db/queries/#topics-db-queries-delete):當Django刪除一個對象時,默認情況下它會模擬SQL約束ON DELETE CASCADE - 換句話說,任何有外鍵指向待刪除對象的對象都將被刪除。 – falsetru

+0

@JosvicZammit,你可以使用'on_delete'字段屬性來定製它。見['ForeignKey.on_delete'](https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.on_delete) – falsetru