我正在轉換遺留站點(最初用rails寫入),默認情況下使用格式{{pk}}.{{extension}}
保存圖像,並且如果上傳新文件,該文件總是被覆蓋。 我想繼續使用這個Django版本的格式。Django ImageField/FileField使用模型的pk保存上傳的文件
我原本以爲擴展FileSystemStorage會走的路,但我不知道一種方式將當前模型對象傳遞給它。任何人都有一個「django方式」的建議來實現這個目標?
如果我需要編寫自己的類來擴展ImageField
來管理這個,那就這樣吧。 :)只是想知道是否有一些簡單的我錯過了。
[編輯] 我做什麼的基礎上,回答surfeurx和DrTyrsa:
temp_image = None
def image_path(self, uploaded_file_name):
prefix = 'designs/'
extension = os.path.splitext(uploaded_file_name)[-1]
if self.pk != None:
return prefix + str(self.pk) + extension
else:
tmp_name = str(uuid.uuid4())
self.temp_image = prefix + tmp_name + extension
return self.temp_image
image_upload = models.ImageField(upload_to=image_path, null=True, blank=True)
def save(self):
self.updated_at = datetime.now()
is_new = self.pk == None
super(Design, self).save()
if is_new:
if self.temp_image != None:
os.rename(MEDIA_ROOT + self.temp_image, MEDIA_ROOT + self.image_path(self.temp_image))
self.temp_image = None
我現在有真正的問題是,我希望它覆蓋圖像。這將提供正確的文件名,但它看起來像我將不得不延長ImageField
以覆蓋它。找到這個小傢伙:http://djangosnippets.org/snippets/636/
謝謝!這幫了很多。雖然我覺得很髒。這似乎是我用django編寫過的最不優雅的東西。 – oliverseal