Django有提供文件系統支持,在Admin站點中可以輕松上傳圖片。使用Admin站點保存圖片,需要安裝Python的圖片操作包
pip install Pillow
1 配置
默認情況下,Django會將上傳的圖片保存在本地服務器上,需要配置保存的路徑。我們可以將上傳的文件保存在靜態文件目錄中,如我們之前設置的static_files目錄中在settings.py 文件中添加如下上傳保存目錄信息
MEDIA_ROOT=os.path.join(BASE_DIR,"static_files/media")
2 為模型類添加ImageField字段
我們為之前的BookInfo模型類添加一個ImageFiled
class BookInfo(models.Model):
... image = models.ImageField(upload_to='booktest', verbose_name='圖片', null=True)
upload_to 選項指明該字段的圖片保存在MEDIA_ROOT目錄中的哪個子目錄,進行數據庫遷移操作
python manage.py makemigrations python manage.py migrate
3 使用Admin站點上傳圖片
進入Admin站點的圖書管理頁面,選擇一個圖書,能發現多出來一個上傳圖片的字段admin站點圖片字段,選擇一張圖片並保存后,圖片會被保存在static_files/media/booktest/
目錄下。
在數據庫中,我們能看到image字段被設置為圖片的路徑
django admin圖片上傳,更改路徑和圖片名稱
1.自定義 上傳圖片的保存路徑和,圖片名稱格式。
def upload_path_handler(instance, filename):
filename="ewn1.jpg"#圖片名稱
return "photos/{id}/{file}".format(id=instance.photo.title, file=filename) #保存路徑和格式
2.models
class Picture(models.Model):
title = models.CharField('圖片標題',max_length=100)
image = models.ImageField('圖片',upload_to=upload_path_handler, null =True, blank=True)
summary = models.CharField('說明',max_length=100)
photo=models.ForeignKey(Photo,verbose_name=u'相冊')
將upload_to的值設置為upload_path_handler即可
以前總是想辦法繼承save方法,總是失敗。原來是思路錯了。。ok'!希望對大家有用