在django中處理whith模型繼承時,是否可以刪除模型子類的實例,而不必刪除超類本身?Django模型繼承:刪除子類保持超類
使用Django example,您是否可以刪除Resturaunt
對象並保留Place
對象?
在django中處理whith模型繼承時,是否可以刪除模型子類的實例,而不必刪除超類本身?Django模型繼承:刪除子類保持超類
使用Django example,您是否可以刪除Resturaunt
對象並保留Place
對象?
昨天我正在尋找這個問題的答案,我想出了這個解決方案,這足以解決我的問題,但可以根據需要進行擴展。
假設你有一個餐廳和一個地方Django模型,刪除的餐廳只腳不沾地的表內該行正在建立一個「假」餐廳的模型是這樣的方式:
class FakeRestaurant(models.Model):
place_ptr = models.PositiveIntegerField(db_column="place_ptr_id", primary_key=True)
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()
class Meta:
app_label = Restaurant._meta.app_label
db_table = Restaurant._meta.db_table
managed = False
現在,您可以從表中檢索對象,如果它沒有邊界的外部關係:
place = Place.objects.get(pk=1)
restaurant = Restaurant.objects.get(pk=1)
fake_restaurant = FakeRestaurant.objects.get(pk=1)
fake_restaurant.delete()
fake_restaurant和餐廳將不再存在,地點將保持不變。
乾杯, 達維德
在Django中加入1.9參數keep_parents
模型delete()
功能,所以爲了不讓父母只要致電:
restaurant.delete(keep_parents=True)
文檔:https://docs.djangoproject.com/en/1.10/ref/models/instances/#django.db.models.Model.delete
UPDATE:
A pparently,這個功能是不是在Django 1.9中正常工作,請參閱註釋。
我剛剛試過這個,在1.9的實現中似乎存在一個錯誤。所有與父對象的關係都被刪除。這已在更高版本中修復https://code.djangoproject.com/ticket/27407 – byoungb 2017-04-06 20:32:50
請注意Meta類中的「託管」選項設置爲True – 2012-07-13 07:10:15
你是一個邪惡的天才! – leech 2012-07-13 21:38:20
我的意思是,設置爲False。編輯沒有保留正確的縮進。 感謝:D – 2012-07-30 07:37:48