Probleme d'edition d'image dans Django

Probleme d'edition d'image dans Django - Python - Programmation

Marsh Posté le 05-10-2021 à 23:22:58    

Bonjour à tous,  
 
Voilà j'ai créé un model qui contient des infos (mots, level, image, ...)
 

Code :
  1. class Word(models.Model):
  2.     objects = models.Manager()
  3.     name = models.CharField(max_length=200, db_index=True)
  4.     slug = models.SlugField(max_length=200, unique=True, blank=True)
  5.     level = models.IntegerField(default=1)
  6.     image = models.ImageField(upload_to='word/', storage=fs)
  7.     group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.SET_NULL)
  8.     class Meta:
  9.         ordering = ('name',)
  10.         verbose_name = 'Mot'
  11.         verbose_name_plural = 'Mots'
  12.     # Methode d'enregistrement dans la base ... On ajoute le champ slug
  13.     def save(self, *args, **kwargs):
  14.         if not self.pk:
  15.             self.name = slugify(self.name)
  16.             self.slug = slugify(self.name)
  17.         extension = self.image.name.split("." )[-1].lower()
  18.         self.image.name = self.slug+"."+extension
  19.         super(Word, self).save(*args, **kwargs)


 
 
Et le code Create et Update associé :  
 

Code :
  1. @login_required()
  2. def createWord(request):
  3.     form = WordForm()
  4.     if request.method == 'POST':
  5.         form = WordForm(request.POST, request.FILES)
  6.         if form.is_valid():
  7.             document = form.save(commit=False)
  8.             document.name = request.POST['name']
  9.             document.save()
  10.             message = "Mot ["+request.POST['name'] + "] ajouté avec succès !"
  11.             messages.success(request, message)
  12.             return redirect('games:create_word')
  13.     context = {'form': form}
  14.     return render(request, 'games/createWord.html', context)
  15. @login_required()
  16. def updateWord(request, pk):
  17.     word = Word.objects.get(id=pk)
  18.     form = WordForm(instance=word)
  19.     if request.method == 'POST':
  20.         form = WordForm(request.POST, request.FILES, instance=word)
  21.         if form.is_valid():
  22.             image_path = word.image.path
  23.             if os.path.exists(image_path) and request.FILES.get('image'):
  24.                 os.remove(image_path)
  25.             document = form.save(commit=False)
  26.             document.name = request.POST['name']
  27.             document.save()
  28.             message = "Mot ["+request.POST['name'] + "] edité avec succès !"
  29.             messages.success(request, message)
  30.             return redirect('games:word')
  31.         else:
  32.             context = {'word': word, 'form': form}
  33.     else:
  34.         context = {'form': form}
  35.         return render(request, 'games/createWord.html', context)


 
Quand je créé un "mot", je saisis donc un mot je choisis un level , une image et la catégorie ... l'enregistrement se passe bien, l'upload du fichier dans le dossier MEDIA_ROOT/word fonctionne bien (info renseignée dans le model via la valeur upload_to)
En revanche quand je souhaite par exemple editer cette meme image, modifier juste le mot sans modifier le fichier ... pour une raison inconnu que j'arrive pas a expliquer il me change la valeur de l'image quit était word/nom.jpg en nom.jpg ... du coup forcement il va chercher MEDIA_ROOT/nom.jpg et il trouve rien :(
 
La vidéo sera plus parlante je pense
 
Si qq'un à une idée ... bien sur la solution de mettre uniquement dans le dossier MEDIA_ROOT pourquoi pas ... mais j'aurais voulu separer les types d'images par dossier d'ou le besoin d'avoir la craétion/mise à jour de ce type de fichier dans ce dossier ;)
 
URL DE LA VIDEO YOUTUBE :  
https://youtu.be/FruqGT0RSeQ
 
Merci pour votre aide

Reply

Marsh Posté le 05-10-2021 à 23:22:58   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed