Когда я удаляю модель, как я могу удалить встроенные данные и загруженный файл
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/