現在のプロジェクトでは、画像を s3 バケットに保存しています。Image クラスの s3 バケットから実際の画像を削除する pre_save シグナル レシーバーがあります。
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 をどのように記述し、そうでない場合は何もしないかということです。