很抱歉,如果我的问题已经问过,但我找不到我想要的答案。
我使用Model
和ImageField
创建了DateField
。在我的django自动管理员(django 1.4)中,我有相应的ModelAdmin
:我想在用户填充ImageField
时从图像中设置日期。总而言之,我希望在选择ImageField
时得到帮助,例如通过覆盖一种后选择方法。
我该怎么做?我可以在django doc中读到一个clean
方法存在,但它的方式/时间对我来说还不清楚。
感谢您的帮助!
答案 0 :(得分:0)
您可以覆盖模型的save()
方法或更好地使用pre_save
signal。在里面,您可以检查对象是否有图像但没有日期,并将日期设置为datetime.datetime.now()
。
答案 1 :(得分:0)
从django-filer看一下Image模型:
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)