私のデータベース設計では、実際に行を削除するのではなく、行が削除されたときにテーブル行に「削除済み」フラグを設定する必要があります。オブジェクトに削除のマークが付けられたときにモデルのdelete()関数を呼び出すフォームセットを使用しています。これは、モデルの削除機能をオーバーライドする必要があることを意味します。シグナルの使用はオプションではありません。
私の質問は、削除ではなく更新を行うために適切にオーバーライドするにはどうすればよいですか。私はmodels.Model.delete関数を調べましたが、django.db.models.deletion.Collectorクラスを使用していくつかの複雑な処理を実行します。コレクターは、値を削除および更新することもできます。次のようにのみ、deleteメソッドをオーバーライドして更新することができました。
class CustomerInfo(models.Model):
...
def delete(self, using=None):
collector = Collector(using=using)
collector.add_field_update(self._meta.get_field('deleted'), True, [self])
collector.delete()
しかし、これが適切な方法であるかどうかはわかりません。または、次のようにオーバーライドできます。
def delete(self, using=None):
self.deleted = True
self.save()
どちらのアプローチも機能しますが、どちらが正しいかわかりません。