基於 Django1.10 文件的深入學習(3)—— models.py 之 FileField
阿新 • • 發佈:2019-02-09
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)