2014-05-09 3 views
0

Je veux être en mesure de télécharger des images via l'administrateur de Django. Mais j'ai du mal àTéléchargement d'image via l'admin dans Django

structure du projet:

/Proj 
    /Proj 

    /static 
     /img 
     /albums 
      /album1 
       img1 
      /album2 
       img2 

classe de l'album:

class Album(models.Model): 
    title = models.CharField(max_length = 60) 

    def __unicode__(self): 
     return self.title 

classe Image:

class Image(models.Model): 
    title = models.CharField(max_length = 60, blank = True, null = True) 
    image = models.FileField(upload_to = get_upload_file_name) <-- !!!! 
    tags = models.ManyToManyField(Tag, blank = True) 
    albums = models.ForeignKey(Album) 
    width = models.IntegerField(blank = True, null = True) 
    height = models.IntegerField(blank = True, null = True) 
    created = models.DateTimeField(auto_now_add=True) 

Je pense que mon image = models.FileField(upload_to = get_upload_file_name) utilise la méthode get_upload_file_name pour placer l'image dans le bon album. Ceci est fait en ajoutant à mon MEDIA_ROOT qui est MEDIA_ROOT = os.path.join(BASE_DIR, 'static')

Donc la méthode get_upload_file_name est censée le faire. Mais je ne suis pas sûr de savoir comment.

Je pense qu'avant de pouvoir uploader je dois d'abord créer un album pour que je puisse décider de l'album dans lequel l'image ira. Un peu perdu à ce stade. Je ne sais pas si ma classe Image ou Album est même complète. Merci pour l'aide!!

Répondre

1

La fonction que vous passez dans upload_to doit avoir la forme:

def get_upload_file_name(instance, filename): 
    new_file_path_and_name = os.path.join(BASE_DIR, 'static', 'test.txt') 
    return new_file_path_and_name 

instance est l'instance du modèle Image vous êtes sur le point de sauver. Cela signifie qu'il a accès à tous les autres champs qui ont été remplis. filename est le nom d'origine du fichier téléchargé. Vous pouvez choisir d'utiliser filename ou simplement retourner un autre chemin + nom de votre choix.

La documentation officielle pour cela est here.

+0

Merci l'homme j'apprécie votre aide !! – Liondancer