0

很抱歉,如果我的问题已经在 SO 上提出,但我找不到我正在寻找的答案。

Model我用一个ImageField和一个创建了一个DateField。在我的 django 自动管理员(django 1.4)中,我有相应的:当用户填充ModelAdmin图像时,我想从图像中设置日期。ImageField总而言之,我想在ImageField选择时得到手,例如通过覆盖一种选择后的方法。

我怎样才能做到这一点 ?我可以在 django doc 中读到clean存在一个方法,但是我不清楚它的调用方式/时间。

谢谢你的帮助 !

4

2 回答 2

0

您可以覆盖模型的save()方法或更好地使用pre_save 信号。在里面您可以检查对象是否有图像但没有日期,并将日期设置为datetime.datetime.now().

于 2012-05-10T07:16:43.820 回答
0

看看来自 django-filer 的图像模型:
https ://github.com/stefanfoulis/django-filer/blob/develop/filer/models/imagemodels.py

您可以在 save 方法中执行类似的操作。

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)
于 2012-05-10T07:26:34.970 回答