基本上我正在尝试保存包含ImageField
的Django模型,并使用从图像中包含的EXIF数据中获取的值更新其latitude
和longitude
FloatFields,如果任何
这是一个说明问题的示例模型:
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数据提取或解析方面的帮助,只需要在save()上更新整个模型的方法。
编辑:好的,这样您就可以在保存记录之前访问文件对象并进一步处理:
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)
答案 0 :(得分:1)
FileField应该返回一个类似文件的对象,您可以读取该对象以提取exif信息。