Как восстановить файлы из вторичной модели при использовании приложения Reversion (DJANGO) - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть 2 модели:

Model1(models.Model):

and 

Model2(models.Model):
fk = models.ForeignKey("Model1",  on_delete=models.CASCADE)
image  = models. ImageField(…..)

Я использую приложение Reversion для восстановления всех удаленных данных, и обе модели зарегистрированы в admin с версией admin. Это работает, но когда я восстанавливаю любую запись модели 1, она не восстанавливает реальные файлы из поля изображения модели 2. Это разумно, потому что они удалены CASCADE. Если я установлю on_delete = DO_NOTHING, это вызовет ошибку целостности, поскольку Postgree поддерживает защиту целостности между таблицами. Это также разумно. Если я использую SET_NULL, то Reversion не сможет правильно восстановить изображения, так как он, очевидно, потеряет идентификатор внешней ключа. Вопрос в том, как восстановить связанные изображения Model2 в данных Model1 с помощью Reversion или, в качестве альтернативы, сохранить идентификатор внешнего ключа для изображений Model2, если я использую что-то вне CASCADE, чтобы не удалять изображения из файловой системы?

Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2019

Я сделал дополнительное поле для хранения идентификатора foreighkey и on_delete. Я установил «set_null». И я изменил метод deletelete в модели, чтобы при попытке реверсирования попытаться восстановить модель, он вызвал бы метод «save» и fk id.будет заполнен обратно из поля памяти.



    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        if self.boat and not self.memory:
            self.memory = self.boat_id
        elif not self.boat and self.memory:
            self.boat_id = self.memory
        elif self.boat and self.memory and self.boat_id != self.memory:
            self.memory = self.boat_id
        models.Model.save(self, force_insert=False, force_update=False, using=None,
                          update_fields=None)
...