2016-04-14 92 views
0

刪除管理界面中的對象時,我想防止刪除相關對象。Django:如何讓管理員不刪除相關對象?

class ObjectToDelete(models.Model): 
    timestamp = models.DateTimeField() 

class RelatedObject(models.Model): 
    otd = models.ForeignKey('app.ObjectToDelete', null=True, blank=True) 

由於RelatedObjectForeignKey是空的,我應該能夠將其設置爲None,而不是刪除整個對象。這正是我想要的行爲。

我知道我可以爲此管理界面創建自定義刪除操作。

而且我也知道我可以製作ManyToManyFieldObjectToDelete這也會阻止RelatedObject的移除。但是,我不會有我想要的一對多關係。

有沒有簡單的方法來實現這一目標?

回答

1

爲您的外鍵設置on_delete選項。如果您希望在相關對象被刪除的值設置爲None,使用SET_NULL

models.ForeignKey('app.ObjectToDelete', on_delete=models.SET_NULL) 

這些規則適用無論你刪除一個對象,你是否做到在管理面板或直接與示範工作實例。 (但是,如果您直接使用SQL中的底層數據庫,它將不會生效。)

+3

使用['SET_NULL']可能更好(https://docs.djangoproject.com/en/1.9/ref /models/fields/#django.db.models.SET_NULL),而不是'CASCADE',因爲OP不希望相關對象被刪除。 – Alasdair

+0

@Alasdair,是的,你說得對,我們可以在這裏使用SET_NULL。但就性能而言,它們都處於數據庫級別,無法確定誰更快。 –

+2

這不是關於哪個更快。使用'models.CASCADE'(直到Django 2.0的默認行爲)刪除相關的對象。這正是OP試圖避免的。 – Alasdair

相關問題