Ale*_*lla 3 django django-models
这里有一个类似的问题,但是从2011年和Django 1.2开始.从那时起,许多事情发生了变化 我正在使用Django 1.9.
我想知道我该如何正确地做到这一点,没有任何搞乱文件系统的风险.我有ImageField
一个模型:
class CartaMagicPy(models.Model):
imagen = models.ImageField(null=True, upload_to=ubicar_magicpy)
Run Code Online (Sandbox Code Playgroud)
在第一时刻,图像被保存.但是,然后,用户裁剪图像,并获得分配给它的新图像ImageField
.
旧图像不会从文件系统中删除.我该如何删除它?问题是model_object.imagen.path
更新后包含新图像的路径.如果我在用新图像更新它之前删除它,我冒险可能保存失败然后我最终没有图像.我可以使用保存后信号的组合吗?任何建议都会有帮助.
正如在这个答案中看到的那样,"有一个应用程序":django-cleanup.
如果您更喜欢自己实现它,那么在评论中链接的@raphv问题的接受答案给出了一些很好的指示.
更新后续更改的一个好方法是使用模型信号; 我倾向于使用post_init
和post_save
,在这种情况下删除旧的图像文件后的变化已经取得进展.像这样的东西:
from django.db.models.signals import post_init, post_save
from django.dispatch import receiver
from myapp.models import CartaMagicPy
@receiver(post_init, sender= CartaMagicPy)
def backup_image_path(sender, instance, **kwargs):
instance._current_imagen_file = instance.imagen
@receiver(post_save, sender= CartaMagicPy)
def delete_old_image(sender, instance, **kwargs):
if hasattr(instance, '_current_imagen_file'):
if instance._current_imagen_file != instance.imagen.path:
instance._current_imagen_file.delete(save=False)
Run Code Online (Sandbox Code Playgroud)
这通常似乎是上面链接的包,以及一些额外的安全检查和清理.
归档时间: |
|
查看次数: |
2181 次 |
最近记录: |