在我的Django(1.6+)應用程序中,我有許多指向(只讀)數據庫視圖的Django模型。 這些模型還包含外鍵關係。 現在如果Django應用程序試圖刪除相關的fk-models,如果我沒有設置所有外鍵字段上的cascade = DO_NOTHING,將導致數據庫錯誤(「無法從視圖中刪除」)。爲DB視圖相關模型創建基礎Django模型類,將所有ForeignKey字段設置爲on_delete = DO_NOTHING
例子:
class PersonView(models.Model):
person = models.ForeignKey(Person, db_column='fk_person', on_delete=DO_NOTHING)
class Meta:
db_table = 'view_persons'
managed = False
由於我所有的DB-視圖模型ForeignKey的字段應該具有級聯=默認DO_NOTHING,我想創建一個將自動設置爲DB-視圖模型基類所有的外鍵字段on_delete = DO_NOTHING,所以我只需要關心從這個模型繼承 - 否則很容易忘記(和冗餘)爲所有字段設置此屬性。 在我想用這樣的代碼來最終結束:
class ViewModel(models.Model):
class Meta:
abstract = True
def __init__(self, *args, **kwargs):
super(ViewModel, self).__init__(*args, **kwargs)
# How to set all foreign-key fields' on_delete attribute to "DO_NOTHING"?
class PersonView(ViewModel):
# no need to set on_delete anymore
person = models.ForeignKey(Person, db_column='fk_person')
class Meta:
db_table = 'view_persons'
managed = False
我怎樣才能改變我的基類來設置所有的外鍵字段on_delete = DO_NOTHING的Django模型的屬性?
我更喜歡更通用的方式,我可以只擴展(抽象)基本模型類,所以我不必小心不使用ForeignKey而不是MyForeignKey。 – ifischer