Django - удаление нескольких файлов одного экземпляра модели и удаление этого экземпляра - PullRequest
2 голосов
/ 29 июля 2011

Например, если я хочу удалить все загруженные изображения из файловой системы и строки базы данных экземпляра, имейте такую ​​модель:

class PictureSet(models.Model):
    image1 = models.ImageFIeld(upload_to="images/")
    image2 = models.ImageFIeld(upload_to="images/")
    image3 = models.ImageFIeld(upload_to="images/")

Есть ли у меня более короткая возможность сделать это, чем [Пример]:

picture_set1 = PictureSet.objects.get(id=1)
picture_set1.image1.delete()
picture_set1.image2.delete()
picture_set1.image3.delete()
picture_set1.delete()

???

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Я бы предложил переопределить метод удаления модели:

def delete(self, *args, **kwargs):
    for field in self._meta.fields:
        if type(field) == models.ImageField:
            image = self.__getattribute__(field.name)
            image.delete()
    super(self.__class__, self).delete(*args, **kwargs)

А потом просто:

PictureSet.objects.get(id=1).delete()
0 голосов
/ 29 июля 2011
picture_set = PictureSet.objects.get(id=1)
picture_set1.delete()

удаляет весь класс набора изображений, нет необходимости удалять все ...

если сами изображения остаются там, просто реализуйте некоторые функции очистки, которые проверяют папку загрузки и ссылки на изображения, хранящиеся в базе данных

надеюсь, это поможет

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