Odissine | Bonjour à tous, Voilà j'ai créé un model qui contient des infos (mots, level, image, ...)
Code :
- class Word(models.Model):
- objects = models.Manager()
- name = models.CharField(max_length=200, db_index=True)
- slug = models.SlugField(max_length=200, unique=True, blank=True)
- level = models.IntegerField(default=1)
- image = models.ImageField(upload_to='word/', storage=fs)
- group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.SET_NULL)
- class Meta:
- ordering = ('name',)
- verbose_name = 'Mot'
- verbose_name_plural = 'Mots'
- # Methode d'enregistrement dans la base ... On ajoute le champ slug
- def save(self, *args, **kwargs):
- if not self.pk:
- self.name = slugify(self.name)
- self.slug = slugify(self.name)
- extension = self.image.name.split("." )[-1].lower()
- self.image.name = self.slug+"."+extension
- super(Word, self).save(*args, **kwargs)
|
Et le code Create et Update associé :
Code :
- @login_required()
- def createWord(request):
- form = WordForm()
- if request.method == 'POST':
- form = WordForm(request.POST, request.FILES)
- if form.is_valid():
- document = form.save(commit=False)
- document.name = request.POST['name']
- document.save()
- message = "Mot ["+request.POST['name'] + "] ajouté avec succès !"
- messages.success(request, message)
- return redirect('games:create_word')
- context = {'form': form}
- return render(request, 'games/createWord.html', context)
- @login_required()
- def updateWord(request, pk):
- word = Word.objects.get(id=pk)
- form = WordForm(instance=word)
- if request.method == 'POST':
- form = WordForm(request.POST, request.FILES, instance=word)
- if form.is_valid():
- image_path = word.image.path
- if os.path.exists(image_path) and request.FILES.get('image'):
- os.remove(image_path)
- document = form.save(commit=False)
- document.name = request.POST['name']
- document.save()
- message = "Mot ["+request.POST['name'] + "] edité avec succès !"
- messages.success(request, message)
- return redirect('games:word')
- else:
- context = {'word': word, 'form': form}
- else:
- context = {'form': form}
- 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 |