【发布时间】:2014-05-20 10:54:05
【问题描述】:
在我当前的项目中,我将图像存储在 s3 存储桶中。 我有一个 pre_save 信号接收器,可以从 Image 类的 s3 存储桶中删除实际图像。
class Image(models.Model):
name = models.CharField(max_length = 255)
caption = models.CharField(max_length = 255)
image = models.ImageField(upload_to='uploads/',blank=True,null=True)
rent_property = models.ForeignKey(RentProperty, related_name='Images')
is_main_image = models.BooleanField(default=False)
@receiver(models.signals.pre_save, sender=Image)
def auto_delete_file_on_change(sender, instance, **kwargs):
"""Deletes file from filesystem
when corresponding `MediaFile` object is changed.
"""
if not instance.pk:
return False
try:
old_file = Image.objects.get(pk=instance.pk).image
except Image.DoesNotExist:
return False
new_file = instance.image
if not old_file == new_file:
old_file.delete(save=False)
我的问题是,我正在使用 django-rest-framework,我想让 PATCH 工作。但是,例如,如果我尝试修补图像描述,它将删除图像本身。我的问题是,我如何编写一个可以区分天气的 IF,或者补丁中是否有需要更改的新图像,如果没有,则什么都不做?
【问题讨论】:
-
我通常在数据文件的模型字段中保存一个 SHA-1 哈希,并检查它是否发生变化。这对你有用吗?
-
你真是个天才。它工作得很好。由于它每次更新时都会获得一个新的随机唯一名称,所以我只检查那是否已更改,如果没有,我保留旧图像。您能否以答案的形式写下您的评论,以便我接受它,并在未来对其他人有所帮助?
-
太好了,很高兴它对你有用。我添加了一个更详细的答案。
标签: python django amazon-s3 django-rest-framework http-patch