Django-exiffield: невозможно загрузить изображение из-за разного формата 'CreateDate' и 'DateTimeField'

Я новичок в Django, надеюсь, вы сможете мне помочь.

Я разрабатываю приложение для фотогалереи, и сейчас я пытаюсь реализовать извлечение данных EXIF. Это работает довольно хорошо с фотографиями, которые были загружены до миграции модели, однако, когда я пытаюсь загрузить новую фотографию, я получаю эту ошибку:

ValidationError at /admin/picture/picture/add/
['“2021:11:12 15:26:56” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.']

Похоже, что DateTimeField и CreateDate в EXIF используют разный формат: DateTimeField использует YYYY-MM-DD HH:MM, а CreateDate в EXIF использует YYYY:MM:DD HH:MM.

Есть ли способ решить эту проблему?

Вот моя фотомодель:

from exiffield.fields import ExifField
from exiffield.getters import exifgetter

class Picture(models.Model):
    image = models.ImageField(upload_to=get_image_upload_path)
    [...]
    # METADATA
    created_on = models.DateTimeField(blank=True, editable=False, null=True)
    width = models.PositiveIntegerField(editable=False, blank=True, null=True)
    height = models.PositiveIntegerField(editable=False, blank=True, null=True)
    size = models.CharField(max_length=20, editable=False, blank=True, null=True)
    camera_make = models.CharField(max_length=20, editable=False, blank=True, null=True)
    camera_model = models.CharField(max_length=20, editable=False, blank=True, null=True)
    lens = models.CharField(max_length=20, editable=False, blank=True, null=True)
    iso = models.PositiveIntegerField(editable=False, blank=True, null=True)
    shutter_speed = models.CharField(max_length=20, editable=False, blank=True, null=True)
    latitude = models.CharField(max_length=20, editable=False, blank=True, null=True)
    longitude = models.CharField(max_length=20, editable=False, blank=True, null=True)
    exif = ExifField(
        source='image',
        denormalized_fields={
            'created_on': exifgetter('CreateDate'),
            'width': exifgetter('ImageWidth'),
            'height': exifgetter('ImageHeight'),
            'size': exifgetter('FileSize'),
            'camera_make': exifgetter('Make'),
            'camera_model': exifgetter('Model'),
            'lens': exifgetter('LensInfo'),
            'iso': exifgetter('ISO'),
            'shutter_speed': exifgetter('ShutterSpeed'),
            'latitude': exifgetter('GPSLatitude'),
            'longitude': exifgetter('GPSLongitude'),
        },
    )

А вот полная ошибка:

Заранее большое спасибо!

Мне удалось решить проблему, так как в exiffield есть специальный getter для этого:

get_datetaken -> Optional[datetime]

Получение времени создания файла в виде datetime

Итак, я сделал следующее:

class Picture(models.Model):
  image = models.ImageField(upload_to='images')
    [...]
  # METADATA
  created_on = models.DateTimeField(editable=False, blank=True, null=True)
  exif = ExifField(
    source='image',
    denormalized_fields={
        'created_on': get_datetaken,
    },
  )
Вернуться на верх