Какой самый простой способ UPDATE ImageField в Django Rest Framework и удаления старого изображения?
Я хочу обновить поле изображения и удалить старое, используя фреймворк Django-rest.
это моя модель
class GroupPostsModel(models.Model):
post_text = models.CharField(max_length=1000)
post_type = models.CharField(max_length=20)
image = models.ImageField(blank=True, null=True, upload_to='post_images/')
document = models.FileField(blank=True,null=True, upload_to='post_documents/')
likes = models.IntegerField(default=0)
time_stamp = models.DateTimeField(auto_now=True)
group = models.ForeignKey(GroupsModel, on_delete=models.CASCADE)
user = models.ForeignKey(UserModel, on_delete=models.CASCADE)
class Meta:
db_table = 'group_posts'
Мой views.py выглядит следующим образом
@api_view(['PATCH'])
def save_edited_post_image(request):
image = request.data.get('image')
print('image == ')
print(request.data.get('image'))
post_id = request.data.get('post_id')
print('post id = '+str(post_id))
try:
GroupPostsModel.objects.filter(id=post_id).update(image=image)
resp = {
'resp' : 'Post image updated...!'
}
except Exception as e:
print(e)
resp = {
'resp': 'Error: Post image update failed...!'
}
return Response(resp)
Код не выдает ошибок, но не работает так, как ожидалось. В базе данных он сохраняет значение как image_name.jpeg;
Ожидаемое значение для хранения: post_images/1640341471608.jpeg
вам нужно создать метод, который будет переименовывать файлы после загрузки и перед сохранением, есть много руководств, демонстрирующих это.
в файле views.py
@api_view(['POST']))
def save_edited_post_image(request):
image = request.data.get('image')
print('image == ')
print(request.data.get('image'))
post_id = request.data.get('post_id')
print('post id = '+str(post_id))
im = request.FILES['image']
print(im)
try:
post = GroupPostsModel.objects.get(id=post_id)
try:
os.remove(post.image.path)
print('Old post image deleted...! path = '+str(post.image.path))
except Exception as e:
print('No image for delete '+str(e))
post.image = request.FILES['image'] #Worked..
post.save()
resp = {
'resp' : 'Post image updated...!'
}
except Exception as e:
print(e)
resp = {
'resp': 'Error: Post image update failed...!'
}
return Response(resp)