2016-05-16 139 views
1

我正在爲DJango開發一個圖像庫項目,只是爲了它。還有,我有一個名爲Gallery的班級和一個名爲ImageGallery的班級。Django-models:從外鍵使用字段

類命名的畫廊是這樣的:

class Gallery(models.Model): 
gallery = models.ForeignKey(Gallery, related_name="parent_gallery") 
title = models.CharField(max_length=200) 
folder = models.CharField(max_length=200) # ex: images/galleries/slugify(self.title) 

class ImageGallery(models.Model): 
gallery = models.ForeignKey(Gallery, related_name="parent_gallery") 
title = models.CharField(max_length=200) 
image = models.ImageField(upload_to=self.gallery.folder) 

嗯,最後一行代碼是我想知道,如果可能或任何其它精細替換它的東西。

DJango-admin我希望能夠添加記錄表ImageGallery並選擇Gallery當我想用的圖像將被保存在gallery.folder字段中指定的文件夾。

什麼是最好的方法來解決這個問題?我還沒有完成兩門課的寫作,但我懷疑他們會這樣工作。先謝謝你。 :-)

回答

3

FileField.upload_to定義如下

此屬性提供設置上傳目錄的方式和文件 名,可以用兩種方式來設定。在這兩種情況下,該值都會通過 傳遞給Storage.save()方法。 ... upload_to也可以是一個可調用的,例如一個函數,如 。這將被調用以獲取包括文件名的上傳路徑 。該可調用函數必須接受兩個參數,並且 返回一個Unix樣式的路徑(帶有正斜槓)以傳遞到存儲系統的 。兩個參數是:

但是self.gallery.folder不是可調用的。你需要的是設置沿着這個例子

def get_upload_path(instance, filename): 
    return '{0}/{1}'.format(instance.gallery.folder, filename) 

指定的行的函數,你的模型將變爲

image = models.ImageField(upload_to=get_upload_path) 
+0

哇,我不知道我怎麼錯過了。除此之外,要走的路是非常棒的。對Django耶! – gglasses