Django - вызов метода при удалении FK в админке - PullRequest
0 голосов
/ 23 июля 2011

Мои модели:

class Spectacle(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100 unique=False)
    description = models.TextField()

class SpectacleGallery(models.Model):
    spectacle = models.ForeignKey(Spectacle)
    image = models.ImageField(upload_to=upload_path_handler, max_length=255, help_text=_(u'tylko pliki z rozszerzeniem .jpg'))
    image_thumb = models.CharField(max_length=255, editable=False, blank=True, null=True)

    def delete(self, *args, **kwargs):
        image_thumb_abs = settings.MEDIA_ROOT + str(self.image_thumb)
        # try to delete thumb and image
        try:
            remove(image_thumb_abs)
        except Exception:
            pass

        try:
            self.image.delete()
        except Exception:
            pass

        super(SpectacleGallery, self).delete(*args, **kwargs) # Call the "real" delete() method.

        #try to delete dir
        try:
            removedirs(settings.SPECTACLE_GALLERY_UPLOAD_PATH + str(self.spectacle_id))
        except:
            pass

Теперь в админке при удалении из SpectacleGallery файл удаляется с диска и БД правильно. Проблема в том, когда я хочу удалить Spectacle. Страница удаления спрашивает, действительно ли я удалю Spectacle и все связанные изображения. Подтверждаю и: все записи из базы данных удалены. К сожалению, файлы из SpectacleGallery не удаляются. Я вставляю печать в метод delete () в SpectacleGallery. Ничего не показывает, поэтому мой вопрос: Почему метод удаления не вызывается при удалении таким образом?

1 Ответ

0 голосов
/ 23 июля 2011

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

(объяснено здесь: https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/)

...