2

私のデータベース設計では、実際に行を削除するのではなく、行が削除されたときにテーブル行に「削除済み」フラグを設定する必要があります。オブジェクトに削除のマークが付けられたときにモデルの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()

どちらのアプローチも機能しますが、どちらが正しいかわかりません。

4

0 に答える 0