Когда я удаляю модель, как я могу удалить встроенные данные и загруженный файл

models.py

    class Issue(models.Model):
        issueId = models.AutoField(primary_key=True)
        title = models.CharField(max_length = 20)
        year = models.IntegerField()
        issueDate = models.DateField()

    class Preview(models.Model):
        issueId = models.ForeignKey(Issue);
        previewPath = models.FileField(upload_to='./upload/magazine_sample')

admin.py

    class PreviewInline(object):
        model = Preview
        extra = 1
        style = 'accordion'
        max_num = 1

    class IssueAdmin(object):
        list_display = ('title',)
        inlines = [PreviewInline]

    admin.site.register(Issue, IssueAdmin)

Как удалить предварительный просмотр и загруженный файл при удалении модели проблемы? Кто-нибудь может мне помочь?

1 ответ

Решение

Вы уверены, что проблема не удаляется? Поведение по умолчанию для ForeignKey заключается в каскадном удалении:

ForeignKey.on_delete Когда объект, на который ссылается ForeignKey, удаляется, Django по умолчанию эмулирует поведение ограничения SQL ON DELETE CASCADE, а также удаляет объект, содержащий ForeignKey. Это поведение можно изменить, указав аргумент on_delete.

Вы используете sqlite3? Я не уверен, что по умолчанию включено каскадирование.

Чтобы удалить изображение, вы можете использовать pre_delete сигнал:

from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import Preview

@receiver(pre_delete, sender=Preview)
def delete_image(sender, instance, using):
    # delete the image -> instance.previewPath

Дополнительная информация о сигналах: https://docs.djangoproject.com/en/dev/ref/signals/ https://docs.djangoproject.com/en/dev/topics/signals/

Другие вопросы по тегам