私は、私のmysqlデータベース(すなわち、管理= False)のビューを表すmodels.Modelサブクラスを持っています。私のユニットテストを実行するときdjangoモデルインスタンスの削除を防止する
はしかし、私が取得:この削除要求の
DatabaseError: (1288, 'The target table my_view_table of the DELETE is not updatable')
ソースは、外部キーを経由して(間接的に)です。私はActualTableModelインスタンスを削除しています、私のテストのティアダウン中に
class MyViewModel(models.Model):
problematic_field = models.ForeignKey(ActualTableModel) # specifying on_delete=models.SET_NULL simply replaces the DELETE error with an UPDATE one
、Djangoが文書化行動に従っていることが表示されます::私は(簡体字)持って
When Django deletes an object, it emulates the behavior of the SQL constraint ON DELETE CASCADE -- in other words, any objects which had foreign keys pointing at the object to be deleted will be deleted along with it.
これが原因となっているようです(managed = False)ビューに適用すると問題が発生します。
私は削除を防止するには、deleteメソッドをオーバーライドしようとしている:
class MyViewModel(models.Model):
...
def delete(self, *args, **kwargs):
pass # deletion of a view row is never valid
をそれが問題を解決しませんでした。
どうすればこの現象を防ぐことができますか?
感謝。私はon_delete = models.SET_NULLを試しましたが、私はDO_NOTHINGを見落としました。後者はエラーを修正します。 – sapi