看看從Django的文件服務器上的圖像模型:
https://github.com/stefanfoulis/django-filer/blob/develop/filer/models/imagemodels.py
你可以做的保存方法類似。
def save(self, *args, **kwargs):
if self.date_taken is None:
try:
exif_date = self.exif.get('DateTimeOriginal', None)
if exif_date is not None:
d, t = str.split(exif_date.values)
year, month, day = d.split(':')
hour, minute, second = t.split(':')
self.date_taken = datetime(
int(year), int(month), int(day),
int(hour), int(minute), int(second))
except:
pass
if self.date_taken is None:
self.date_taken = datetime.now()
self.has_all_mandatory_data = self._check_validity()
try:
# do this more efficient somehow?
self.file.seek(0)
self._width, self._height = PILImage.open(self.file).size
except Exception:
# probably the image is missing. nevermind.
pass
super(Image, self).save(*args, **kwargs)
感謝您的回答。我希望在輸入'ImageField'時調用更多,在保存之前這麼多,是否有信號或者可以使用? – Emmanuel
你的意思是 - 在上傳到服務器之前?您可以使用JS然後用當前時間戳填充隱藏字段。 – ilvar
我意識到我的請求很愚蠢(或者至少是複雜的,因爲圖像確實沒有上傳)。所以我決定重寫'save'方法。 – Emmanuel