3
我剛剛成功地實施類似賈爾斯建議保存新圖像與模型的主鍵的文件名這裏的一個方法: https://stackoverflow.com/a/16574947/5884437如何刪除現有的文件用戶上傳,當一個新的
使用的實際代碼:
class Asset(models.Model):
asset_id = models.AutoField(primary_key=True)
asset_image = models.ImageField(upload_to = 'images/temp', max_length=255, null=True, blank=True)
def save(self, *args, **kwargs):
# Call save first, to create a primary key
super(Asset, self).save(*args, **kwargs)
asset_image = self.asset_image
if asset_image:
# Create new filename, using primary key and file extension
oldfile = self.asset_image.name
dot = oldfile.rfind('.')
newfile = 'images/' + str(self.pk) + oldfile[dot:]
# Create new file and remove old one
if newfile != oldfile:
self.asset_image.storage.delete(newfile)
self.asset_image.storage.save(newfile, asset_image)
self.asset_image.name = newfile
self.asset_image.close()
self.asset_image.storage.delete(oldfile)
# Save again to keep changes
super(Asset, self).save(*args, **kwargs)
def __str__(self):
return self.asset_description
eg用戶在空白的「新資產」表單上提交「MyPicture.jpg」。服務器首先預先保存新資產以生成(asset_id)主鍵,然後將文件重命名爲[asset_id]。[original_extension](例如「26.jpg」)並將其移至正確的文件夾。
不幸的是,我剛剛發現這並沒有考慮具有不同擴展名的文件,例如用戶首先上傳圖片,該圖片被重命名爲「26.jpg」,但是當用戶上傳具有不同擴展名(例如「.png」)的該資源的新圖像時,「26.jpg」&「26.png 「將彼此並存。
如何更改此選項,以便在爲該資產/主鍵上載新映像時始終刪除現有映像?
只是爲了學習經驗,我試圖根據您的代碼推薦我自己的代碼,但我剛剛嘗試過Django清理,它的工作非常出色,我只是要去堅持下去! 感謝您的建議! – TimJ