1
我想更改上傳時的圖像名稱及其存儲位置。如何在django中更改文件的名稱和上傳的存儲位置
我
def name_func(instance, filename):
blocks = filename.split('.')
ext = blocks[-1]
filename = "%s.%s" % (instance.id, ext)
return filename
class Restaurant(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
image_file = models.ImageField(upload_to=name_func,null=True)
class Bar(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
image_file = models.ImageField(upload_to=name_func,null=True)
這上傳所有的圖像文件到媒體文件夾,並賦予它實例的ID作爲名字。
現在我想要圖像文件上傳到兩個不同的子文件夾。所以,我嘗試使用系統filestorage:
fs_restaurant = FileSystemStorage(location='media/restaurant')
fs_bar = FileSystemStorage(location='media/bar')
,然後改變image_file
領域:
image_file = models.ImageField(upload_to=name_func,null=True, storage=fs_restaurant)
和
image_file = models.ImageField(upload_to=name_func,null=True, storage=bar)
現在這個保存在正確的文件夾結構中的文件,但是,當我點擊管理面板中的鏈接時,鏈接不正確。這顯然是name_func
函數,但我想知道是否有一種方法來糾正?在文檔中我找不到存儲類中的命名函數。
關於如何解決這個問題的任何想法?
但後來我必須爲不同的類寫兩個單獨的函數,對吧? – Tom
@PaulBernhardWagner這會工作,但你可能不需要,你可以檢查實例參數的類型,例如,如果type(instance)== Bar else'restaurant'',那麼'path ='bar'。我沒有親自嘗試過,但它可以工作。 – ARJMP
那個作品,對不起,忘了接受,謝謝!! – Tom