0

オブジェクトを実際に削除したくないので、モデルUSER (BASE)にを導入しました。delete_dateBASE

class BASE (models.Model):

    class Meta:

        abstract = True
        app_label = 'base'
        verbose_name_plural = 'bases'

    objects = BASE_MANAGER ()

    insert_date = models.DateTimeField (default = datetime.now (), auto_now_add = True)
    update_date = models.DateTimeField (default = datetime.now (), auto_now = True)
    delete_date = models.DateTimeField (null = True, blank = True)

    def save (self):

        super (BASE, self).save ()

    def delete (self):

        if not self.delete_date:
            self.update_date = datetime.now ()
            self.delete_date = datetime.now ()
            self.save ()
        else:
            pass ## no delete!

実際のSQLは実行されていないので、これで問題ありませsuper (BASE, self).delete ()ん。BASE.delete残念ながら、これにより外部キーのカスケードも停止します。Djangoでこれを達成するためのエレガントな方法はありますか?

4

1 に答える 1

0

どうやら私のユースケースを説明する実際の用語は、 soft delete implementation で実装された soft delete cascading で説明されている「soft delete」であるため、探していた答えを見つけた思います

それを見てみましょう。まだ回答ありがとうございます。:)

于 2012-11-25T23:39:47.033 に答える