В основном я пытаюсь сохранить модель Django, которая содержит ImageField
, и обновляет ее latitude
и longitude
FloatFields значениями, извлеченными из данных EXIF, содержащихся в изображении, если таковые имеются.
Вот пример модели, иллюстрирующей проблему:
class GeoImage(models.Model):
image = models.ImageField(upload_to='/path/to/uploads')
latitude = models.FloatField(null=True, blank=True)
longitude = models.FloatField(null=True, blank=True)
def save(self):
# grab the path of the image of the ImageField
# parse the EXIF data, fetch latitude and longitude
self.latitude = fetched_latitude
self.longitude = fetched_longitude
return super(GeoImage, self).save()
Можете ли вы определить проблему?Я не знаю, как получить доступ к пути к файлу изображения до фактического сохранения экземпляра модели, и я не могу сохранить запись, обновить некоторые свойства, а затем снова сохранить ее, потому что это создаст цикл post_save (и то же самое теоретически происходит сpost_save
сигнал…
Любая помощь очень ценится.
Примечание: Мне не нужна помощь ни в извлечении данных EXIF, ни в их разборе, только в способе обновлениявся модель при сохранении ().
Редактировать: Хорошо, так что вы можете получить доступ к объекту файла и обработать его до сохранения записи:
class GeoImage(models.Model):
image = models.ImageField(upload_to='/path/to/uploads')
latitude = models.FloatField(null=True, blank=True)
longitude = models.FloatField(null=True, blank=True)
def save(self):
latitude, longitude = gps_utils.process_exif(self.image.file)
if latitude: self.latitude = latitude
if longitude: self.longitude = longitude
return super(GeoImage, self).save(*args, **kwarg)