2013-01-24 14 views
6

私は、私の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 

をそれが問題を解決しませんでした。

どうすればこの現象を防ぐことができますか?

答えて

7

多分on_delete argument optionsのいずれかを試すことができますか?

すなわち:ドキュメント・リンクの

problematic_field = models.ForeignKey(ActualTableModel, on_delete=models.PROTECT) 
+1

感謝。私はon_delete = models.SET_NULLを試しましたが、私はDO_NOTHINGを見落としました。後者はエラーを修正します。 – sapi

関連する問題