1. 程式人生 > >基於 Django1.10 文件的深入學習(3)—— models.py 之 FileField

基於 Django1.10 文件的深入學習(3)—— models.py 之 FileField

class FileField(upload_to=None, max_length=100, **options)[source]

檔案上傳欄位。

注意: primary_key引數不受支援,如果使用,將引發錯誤。

有兩個可選引數:

FileField.upload_to
此屬性提供了一種設定上傳目錄和檔名的方式,可以通過兩種方式進行設定。 在這兩種情況下,該值都將傳遞給Storage.save()方法。

如果您指定了一個字串值,它可能包含strftime()格式,將由檔案上傳的日期/時間替換(以便上傳的檔案不填滿給定的目錄)。 例如:

class MyModel(models.Model)
:
# 檔案將會上傳到 MEDIA_ROOT/uploads upload = models.FileField(upload_to='uploads/') # or... # 檔案將會儲存到 MEDIA_ROOT/uploads/2015/01/30 upload = models.FileField(upload_to='uploads/%Y/%m/%d/')

如果使用預設的FileSystemStorage,則字串值將被附加到MEDIA_ROOT路徑上,以形成儲存上傳檔案的本地檔案系統上的位置。 如果您正在使用其他儲存空間,請檢查該儲存的文件,以檢視它如何處理upload_to

upload_to也可以是可呼叫的,作為一個函式。 這將被呼叫來獲取上傳路徑,包括檔名。 此 可呼叫 必須接受兩個引數,並返回一個Unix樣式的路徑(帶有斜槓),以傳遞到儲存系統。 兩個引數是:

這裡寫圖片描述

For example:

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)

這裡寫圖片描述