2014-05-09 78 views
0

上傳我希望能夠通過在Django管理員上傳圖片。但我有一些困難,圖像通過管理員在Django

項目結構:

/Proj 
    /Proj 

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

Album類:

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

    def __unicode__(self): 
     return self.title 

圖片類:

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) 

我覺得我image = models.FileField(upload_to = get_upload_file_name)使用get_upload_file_name方法放置正確相冊中的圖像。這是通過追加到我的MEDIA_ROOT這是MEDIA_ROOT = os.path.join(BASE_DIR, 'static')

因此get_upload_file_name方法應該這樣做。但我不知道如何如此。

我想之前我可以上傳我首先需要創建一個相冊這樣的話,我可以決定的圖像會去哪個專輯。在這一點上有點失落。不知道我的ImageAlbum類甚至是完整的。謝謝您的幫助!!

回答

1

你傳遞到upload_to函數必須具有以下形式:

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 

instanceImage模型你要保存的實例。這意味着它可以訪問已經填充的所有其他字段。 filename是上傳文件的原始名稱。您可以選擇使用filename或者直接返回您選擇的另一個路徑+名稱。

對此的官方文檔是here

+0

感謝的人我感謝您的幫助! – Liondancer