關(guān)于定制FileField中的上傳文件名稱(chēng)問(wèn)題
FileField中的upload_to屬性可以設(shè)定上傳文件的存儲(chǔ)目錄和名稱(chēng),它可以是個(gè)字符串,也可以是個(gè)callable,比如一個(gè)方法。
當(dāng)upload_to的值設(shè)為一個(gè)方法時(shí),就可以對(duì)上傳文件的名稱(chēng)進(jìn)行修改了。方法需要兩個(gè)參數(shù),instance與filename,instance為此FileField所屬的Model實(shí)例,filename為上傳文件的名稱(chēng)。
舉例:
def user_directory_path(instance, filename): # file will be uploaded to MEDIA_ROOT/user_<id>/<filename> return 'user_{0}/{1}'.format(instance.user.id, filename) class MyModel(models.Model): upload = models.FileField(upload_to=user_directory_path)
當(dāng)一個(gè)類(lèi)定義了__call__方法時(shí),也可以像func一樣被調(diào)用,所以,upload_to的值也可以是一個(gè)定義了__call__方法的類(lèi)。
比如,要根據(jù)上傳時(shí)間為文件名加時(shí)間戳:
import hashlib import os import time from django.utils.deconstruct import deconstructible @deconstructible class TimeStampFileName(object): def __init__(self, path): self.path = os.path.join(path, "%s%s") def __call__(self, instance, filename): extension = os.path.splitext(filename)[1] data = "%s_%d"%(filename,int(time.time())) file_hash = hashlib.sha1(data).hexdigest() return self.path % (file_hash, extension)
Model中的FileField可以如下定義:
class MyModel(models.Model): upload = models.FileField(upload_to=TimeStampFileName('media/'), )
總結(jié)
以上所述是小編給大家介紹的定制FileField中的上傳文件名稱(chēng),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Ajax提交與傳統(tǒng)表單提交的區(qū)別說(shuō)明
本篇文章主要是對(duì)Ajax提交與傳統(tǒng)表單提交的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02js中.sort()函數(shù)的常見(jiàn)用法與高級(jí)操作
JavaScript中的sort函數(shù)可以用來(lái)對(duì)數(shù)組進(jìn)行排序,默認(rèn)情況下sort函數(shù)將數(shù)組中的元素轉(zhuǎn)換為字符串,并按照Unicode碼點(diǎn)的順序進(jìn)行排序,下面這篇文章主要給大家介紹了關(guān)于js中.sort()函數(shù)的常見(jiàn)用法與高級(jí)操作的相關(guān)資料,需要的朋友可以參考下2023-05-05淺談JavaScript中的String對(duì)象常用方法
這篇文章主要介紹了JavaScript中的String對(duì)象常用方法,非常簡(jiǎn)單實(shí)用,有需要的小伙伴參考下2015-02-02JavaScript和TypeScript中的void的具體使用
這篇文章主要介紹了JavaScript和TypeScript中的void的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09JavaScript結(jié)合Bootstrap仿微信后臺(tái)多圖文界面管理
這篇文章主要為大家詳細(xì)介紹了js結(jié)合Bootstrap仿微信后臺(tái)多圖文界面管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07JavaScript實(shí)現(xiàn)的DOM繪制柱狀圖效果示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的DOM繪制柱狀圖效果,涉及javascript數(shù)值計(jì)算及頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-08讓iframe框架網(wǎng)頁(yè)在任何瀏覽器下自動(dòng)伸縮
很多朋友都在使用iframe中遇到過(guò)不能自動(dòng)隨頁(yè)面伸縮,特別是動(dòng)態(tài)讀取頁(yè)面的時(shí)候,會(huì)出現(xiàn)滾動(dòng)條,影響美觀,今天研究一下了,發(fā)現(xiàn)了一個(gè)簡(jiǎn)單解決的辦法,可以在IE,F(xiàn)IREFOX,OPERA下使用2006-08-08微信小程序?qū)崿F(xiàn)樹(shù)莓派(raspberry pi)小車(chē)控制
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)樹(shù)莓派(raspberry pi)小車(chē)控制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02