Какой самый простой способ 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)
Вернуться на верх