2010-07-23 6 views
0
class Project(models.Model): 
    slug = models.SlugField(max_length=100) 
    main_file = models.FilePathField(path="/home/mn/myfiles/%s" % slug) 

Ce code ne fonctionne pas, ce que je veux illustrer. Je veux remplir FilePathField quand l'objet est accédé (c'est-à-dire quand il est mis à jour dans l'admin django, pas quand il est créé).django dynamique FilePathField

Y at-il un crochet où vous pouvez définir les champs juste avant qu'ils soient remplis? Quelque chose comme object.on_get(instance): ... peut-être?

Répondre

1

On ne sait pas quelles sont vos intentions ici.

Comme instances de modèle ne sont que les classes Python, vous pouvez le faire par une méthode sur la classe du projet:

class Project(models.Model): 
    slug = models.SlugField(max_length=100) 

    @property 
    def main_file(self): 
     return "/home/mn/myfiles/%s" % self.slug 

Si vous souhaitez spécifier manuellement un endroit à l'extérieur de MEDIA_ROOT pour télécharger des fichiers vers, vous aurez besoin sous-classe django.db.models.fields.files.FileField et remplacer the __init__ method.

Questions connexes