Ловля массовых событий в Джанго - PullRequest
1 голос
/ 20 сентября 2019

У меня есть Book модель.Он имеет некоторые поля, такие как title, year publish и т. Д. Кроме того, я переопределил save() метод.Когда добавляются новые книги, он проверяет, существует ли книга, создает новый каталог с именем self.title в MEDIA_ROOT пути.

    def save(self, *args, **kwargs):
        book_dir = os.path.join(MEDIA_ROOT, self.title)

        # check that at least one file is loading
        if all([self.pdf, self.fb2, self.epub]):
            raise ValidationError("At least 1 file should be uploaded!")
        # create book's directory if it not exists
        if os.path.exists(book_dir):
            raise ValidationError("This book is already exists!")
        else:
            os.mkdir(book_dir)

        # rename and edit storage location of books to book_dir
        for field in [self.image, self.pdf, self.fb2, self.epub]:
            field.storage.location = book_dir

        super().save(*args, **kwargs)  # Call the "real" save() method.

Также у меня есть переопределенный метод delete(), который просто удаляет каталог изудаленная книга.

def delete(self, *args, **kwargs):
    book_dir = os.path.join(MEDIA_ROOT, self.title)

    rmtree(book_dir)
    super().delete(*args, **kwargs)  # Call the "real" delete() method.

delete() метод работает хорошо, если я удаляю только 1 книгу.Но если я хочу удалить несколько файлов (все действия выполняются в панели администратора), удаляются только записи БД.

Итак, я хочу просто уловить этот момент, чтобы удалить каталог удаленной книги.

1 Ответ

1 голос
/ 20 сентября 2019

Похоже, сигнал pre_delete может быть полезен здесь: https://docs.djangoproject.com/en/2.2/ref/signals/#pre-delete

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...