2010-04-15 4 views
0

Je les deux modèles présentés ci-dessous: Comme vous pouvez le voirDjango ManyToMany, ImageField et upload_to

class EntryImage(models.Model): 
    image = models.ImageField(upload_to="entries") 

class Entry(models.Model): 
    code = models.CharField(max_length=70, unique=True) 
    images = models.ManyToManyField(EntryImage, null=True, blank=True) 

, entrée peut avoir 0 ou plusieurs images. Ma question est: Est-il possible d'avoir ce genre de schéma et de changer dynamiquement le upload_to basé sur le code d'entrée?

Répondre

0

Vous pouvez rendre upload_to un appelable, auquel cas il sera appelé et transmis l'instance du modèle sur lequel il se trouve. Cependant, cela n'a peut-être pas encore été enregistré, auquel cas vous ne pourrez peut-être pas interroger le code d'entrée.

+0

Merci pour la réponse rapide. Quel serait un schéma alternatif pour avoir: 1 Entrée qui a beaucoup d'images et ces images sont téléchargées dans un répertoire spécifique? (Puisque j'ai BEAUCOUP d'entrées, je ne préférerais pas avoir une clé étrangère dans EntryImage pointant sur Entrée) – dimitris

+0

J'ai un problème similaire. Pouvez-vous contourner cela en utilisant des signaux (pre_save)? – tatlar

0

Eh bien, sans aller trop loin, vous pouvez faire une table M2M intermédiaire EntryImageDir avec le nom du répertoire. Vous y lieriez vos EntryImages avec une clé étrangère et vous pourriez créer le EntryImageDir soit avec un signal à l'entrée create ou lors du téléchargement de quelque chose.

La documentation pour les communications M2M avec des champs personnalisés est ici: http://www.djangoproject.com/documentation/models/m2m_intermediary/

Questions connexes