Question

Je suis une application avec la mise en œuvre django, qui a un modèle avec un FileField:

class Slideshow(models.Model):
    name = models.CharField(max_length=30,unique=True)
    thumbnail = models.FileField(max_length=1000,upload_to="images/app/slideshows/thumbnails")

et j'ai un backend admin où django gère les modèles. Je viens d'ajouter le fichier admin.py et django gère tout pour moi

from django.contrib import admin

from apps.gallery.models import Slideshow

admin.site.register(Slideshow)

Dans le back-end, il est possible d'ajouter, de supprimer et mettre à jour les diaporamas. Cependant, lorsque je tente de mettre à jour un diaporama et modifier sa vignette d'attribut [FileField], django ne supprime pas l'ancien fichier. Par conséquent, après plusieurs mises à jour le serveur est rempli de nombreux fichiers qui sont inutiles. Ma question est: comment puis-je faire django supprimer ces fichiers automatiquement après une mise à jour

Je serais vraiment reconnaissant de votre aide

Était-ce utile?

La solution

Je suis sûr que Django fait en design. Il ne peut pas savoir, par exemple, si d'autres modèles pourraient utiliser ce fichier. Vous aussi être vraiment surpris si vous attendiez le fichier à rester et a découvert que django supprimé!

Cependant, il y a aussi la question que dès que vous modifiez le champ de fichier, vous perdez l'ancien nom de fichier.

Il y a un billet ouvert sur ce problème: http://code.djangoproject.com/ticket/11663

Il y a un patch http://code.djangoproject.com/ticket/2983 qui montre comment remplacer __set__ pour enregistrer le nom de fichier précédent. Ensuite, la méthode de __save__ de votre modèle peut avoir accès au nom de fichier précédent pour le supprimer.

Autres conseils

Je pensais beaucoup à ce problème, et finalement je trouve une solution que fonctionne bien pour moi. Vous pouvez trouver tous les modèles de projet et de connecter des signaux pre_save et post_delete pour eux.

A la fin je fait application, qui Sloves ce problème - django-nettoyage

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top