2012-04-26 46 views
0

在我的項目中,我有一個應用程序與學校模型和學校指導模型。django用setattr更改圖像文件的位置

學校模型具有用於各種圖像領域,如標識,密封等:

seal_image = models.ImageField(upload_to="sealimgs", null=True, blank=True) 
logo_image = models.ImageField(upload_to="logos", null=True, blank=True) 

的schoolsuggestion模型具有用於相應的校場是什麼的字段,並且圖像場。

field_name = models.CharField(max_length=255, default="") 
image_field = models.ImageField(upload_to='img', null=True, blank=True) 

當學校的建議被批准,我改寫保存,這樣,它將通過GETATTR(FIELD_NAME)得到相關學校的現場,並與SETATTR(FIELD_NAME,image_field)(我簡化的語法設定,但你明白了)。

問題是,文件仍然保存在img中,大概是因爲我使用的是setattr而不是圖像字段特定的保存,它會將其上傳到正確的目錄。

那麼我該如何做到這一點?這很有道理,我可能會以某種方式獲得屬性的upload_to值,以某種方式使用該文件路徑重新保存圖像,然後在resaved圖像上使用setattr,但我無法弄清楚如何執行前兩項。

回答

1

我修改上傳到這個函數和類DEF上述文件中包含它:

def get_upload_to(instance, filename): 
    return School._meta.get_field(instance.field_name).upload_to+"/"+filename 
+0

所以你的問題是如何通過一個實例來訪問模型字段,而不是實例字段的值,對不對? – okm 2012-04-26 17:14:08

+1

如果是這樣,你的解決方案是好的。還可以使用'os.path.join'連接路徑。 – okm 2012-04-26 17:15:50