Django-fr

Forum

#1 21-01-2009 22:04:27

Séno Hervé Edorh
Membre
Inscription : 11-08-2010
Messages : 21

suppression

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

#2 21-01-2009 22:19:25

Cyril Doussin
Membre
Inscription : 11-08-2010
Messages : 10

Re : suppression

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

#3 21-01-2009 22:23:16

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : suppression

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

#4 21-01-2009 22:31:25

Séno Hervé Edorh
Membre
Inscription : 11-08-2010
Messages : 21

Re : suppression

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

#5 21-01-2009 22:32:54

Séno Hervé Edorh
Membre
Inscription : 11-08-2010
Messages : 21

Re : suppression

parfais je l'essaye tout de suite mais j'ai un autre problème que je viens
d'exposer

Hors ligne

#6 21-01-2009 23:53:42

Séno Hervé Edorh
Membre
Inscription : 11-08-2010
Messages : 21

Re : suppression

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

Pied de page des forums