Django admin - 在输入另一个字段时设置一个字段

时间:2012-05-09 20:09:34

标签: python django django-admin

很抱歉,如果我的问题已经问过,但我找不到我想要的答案。

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

我该怎么做?我可以在django doc中读到一个clean方法存在,但它的方式/时间对我来说还不清楚。

感谢您的帮助!

2 个答案:

答案 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)