Une solution qui marche mais qui ne me paraît pas tout à fait satisfaisante c'est de modifier la méthode save()
pour qu'elle s'exécute deux fois lors de la création d'une instance, afin de récupérer l'id
. Ça devrait nous donner quelque chose comme ça :
def save(self, *args, **kwargs):
if self.id is None:
super(TonModele, self).save(*args, **kwargs)
# l'instance a forcément un id à ce niveau
super(TonModele, self).save(*args, **kwargs)
Ce code n'est pas suffisant car la méthode content_file_name()
est exécutée seulement lors du premier appel de save()
comme l'image n'a pas changée. Pour résoudre ça, il suffit de remplacer le contenu de image
par None
lors du premier appel de save()
:
def save(self, *args, **kwargs):
if self.id is None:
image_temporaire, self.image = self.image, None
super(TonModele, self).save(*args, **kwargs)
self.image = image_temporaire
# l'instance a forcément un id à ce niveau
super(TonModele, self).save(*args, **kwargs)
C'est assez basique mais ça marche.