J'ai le modèle suivant contenant un FileField
où l'utilisateur fournit un fichier zip contenant des images. Ce fichier zip est précessé par une méthode appelée process_zipfile()
lors de la sauvegarde.Django: remplir un champ pendant save()
class Album(models.Model):
nom = models.CharField(max_length = 200)
added_by = models.ForeignKey(User, null=True, blank=True)
gallery = models.ForeignKey(Gallery, null=True, blank=True)
zip_file = models.FileField('image field .zip', upload_to=PHOTOLOGUE_DIR+"/temp",
help_text='Select a .zip file of images to upload into a new Gallery.')
class Meta:
ordering = ['nom']
def save(self, *args, **kwargs):
self.gallery = self.process_zipfile()
super(Album, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
photos = self.gallery.photos.all()
for photo in photos:
photo.delete()
self.gallery.delete()
super(Album, self).delete(*args, **kwargs)
def process_zipfile(self):
if os.path.isfile(self.zip_file.path):
......(creates gallery object and links the photos)
return gallery
il fonctionne bien, sauf que le champ gallery
(laissé vide par la forme) n'est pas remplie par la galerie créée par process_zipfile()
. Qu'est-ce que je me trompe?
En outre, la méthode de suppression ne semble pas fonctionner, aucune idée?
Quel est votre type de retour pour process_zipfile()? Avez-vous vérifié que c'est le type de modèle Gallery? –
@kesun: oui est l'utilisation 'gallery = Gallery.objects.create (titre = self.nom, title_slug = slugify (self.nom))' – Mermoz
À propos de la méthode de suppression: parfois (surtout lorsque vous supprimez via django-admin) cette La méthode n'est jamais appelée. Mieux vaut utiliser les signaux pre_delete/post_delete à la place pour s'assurer que les choses que vous voulez faire dans delete sont toujours faites. –