Vous n'êtes pas identifié(e).
Bonjour,
J'aimerais supprimer une photo dans un répertoire lors d'une mise à jour.
Voici mon code
if formset.is_valid():
if request.FILES['form-0-photo'] != pict.photo:
os.remove(unicode(pict.photo))
formset.save()
avec pict.photo le nom du chemain stocké dans la base donc "si la photo
upload est différente de celle dans la base la supprimer"
et j'ai cette erreure ci [Errno 2] No such file or directory:
'photo/image1.jpg'
j'ai changer le chemain en ajoutant d'autres
"os.remove("../media/img/unicode(pict.photo))" mais ça marche pas. La photo
se trouve dans le répertoire media de mon application django
/media/img/image1.jpg
Ou quelqu'un aurait une autre technique pour la mise à jour?
Merci
Hors ligne
Hello,
Le mieux est surement d'utilisé un chemin absolu et non relatif.
Le chemin que tu stockes dans la base de données doit etre relatif au
dossier qui sert de racine à tous tes fichiers uploadés.
Pour la plupart des projets ce dossier est indiqué par la variable
MEDIA_ROOT dans settings.py.
Et donc ensuite pour effacer un fichier:
import os
from django.conf import settings
absolute_path = os.join(settings.MEDIA_ROOT, db_path)
os.remove(absolute_path)
Maintenant il faut aussi que ton serveur web est les droits correctes sur
ces fichiers (ce qui doit etre le cas si l'upload marche, mais autant
vérifier...)
Cyril
On Wed, Jan 21, 2009 at 9:04 PM, Séno Hervé Edorh <senobogos _AT_ gmail.com>wrote:
> Bonjour,
> J'aimerais supprimer une photo dans un répertoire lors d'une mise à jour.
> Voici mon code
>
> if formset.is_valid():
> if request.FILES['form-0-photo'] != pict.photo:
> os.remove(unicode(pict.photo))
> formset.save()
>
> avec pict.photo le nom du chemain stocké dans la base donc "si la photo
> upload est différente de celle dans la base la supprimer"
>
> et j'ai cette erreure ci [Errno 2] No such file or directory:
> 'photo/image1.jpg'
>
> j'ai changer le chemain en ajoutant d'autres
> "os.remove("../media/img/unicode(pict.photo))" mais ça marche pas. La photo
> se trouve dans le répertoire media de mon application django
> /media/img/image1.jpg
>
> Ou quelqu'un aurait une autre technique pour la mise à jour?
>
> Merci
>
> --
> Hervé
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Bonsoir,
Si tant est que ton application est en Django>1.0.x, sache que maintenant
chaque champs de type UploadField et héritiers, expose les méthodes de l'api
de "Storage", tu peux donc directement effacer ton fichier en utilisant
delete() dessus.
Avec ton exemple ce serait :
pict.photo.delete()
Attention, cette méthode n'est pas silencieuse, si le fichier indiqué en bdd
n'existe pas, ça lève une "Exception".
Cf. http://docs.djangoproject.com/en/dev/topics/files/#file-storage
Le Wednesday 21 January 2009 22:04:27 Séno Hervé Edorh, vous avez écrit :
> Bonjour,
> J'aimerais supprimer une photo dans un répertoire lors d'une mise à jour.
> Voici mon code
>
> if formset.is_valid():
> if request.FILES['form-0-photo'] != pict.photo:
> os.remove(unicode(pict.photo))
> formset.save()
>
> avec pict.photo le nom du chemain stocké dans la base donc "si la photo
> upload est différente de celle dans la base la supprimer"
>
> et j'ai cette erreure ci [Errno 2] No such file or directory:
> 'photo/image1.jpg'
>
> j'ai changer le chemain en ajoutant d'autres
> "os.remove("../media/img/unicode(pict.photo))" mais ça marche pas. La photo
> se trouve dans le répertoire media de mon application django
> /media/img/image1.jpg
>
> Ou quelqu'un aurait une autre technique pour la mise à jour?
>
> Merci
Hors ligne
Salut Cyril,
Bien reçu, je vais l'essayer tout de suite après car Je viens de remarquer
que le update de mon formulaire ne marche même j'ai l'erreur me spécifiant
que l'objet existe déja. Au fait je pense qu'au lieu de faire une mise a
jour il essaye de recréer l'objet stagiaire. n'est ce pas ça la technique
pour mise à jour? Stagiaire est la classe de mon model (table stagiaire)
def stagiaire_modif(request, idsr):
StgiaireFormSet = modelformset_factory(Stagiaire,
max_num=1,can_delete=True)
if request.method == 'POST':
stg = Stagiaire.objects.filter(stgr_id=int(idsr))
for p in stg:
pict = p #récupère le chemain de photo
formset = StgiaireFormSet(request.POST, request.FILES)
if formset.is_valid():
if request.FILES['form-0-photo'] != pict.photo:
os.remove(unicode(pict.photo))
formset.save()
return HttpResponseRedirect('/fiche/'+str(idsr)+'/')
else:
formset = StgiaireFormSet(queryset=Stagiaire.objects.filter(
stgr_id=int(idsr)))
return render_to_response('/.../
Hors ligne
parfais je l'essaye tout de suite mais j'ai un autre problème que je viens
d'exposer
Hors ligne
Slt a tous,
J'ai trouvé une solution à mes problème de mise à jour et ça marche, merci a
David Thenon,
pict.photo.delete()
marche parfaitement.
Merci et à bientôt
Hors ligne