Удалить, используя «удалить штамп» и автоматическое каскадирование - PullRequest
0 голосов
/ 24 октября 2011

Поскольку я никогда не хочу на самом деле удалять свои USER (BASE) объекты, я ввел delete_date для моей BASE модели:

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!

Теперь, поскольку я не включил super (BASE, self).delete ()в BASE.delete фактический SQL не выполняется, что нормально;к сожалению, это также останавливает каскадирование внешних ключей.Есть ли элегантный способ добиться этого в Django?

1 Ответ

0 голосов
/ 26 ноября 2012

Я думаю, что нашел ответ, который искал, поскольку, по-видимому, фактическим термином, описывающим мой вариант использования, является «мягкое удаление», описанное в каскадное мягкое удаление , реализованное в мягкоеудалить реализацию .

Я посмотрю на это;еще спасибо за ответы.:)

...