Я использую Django Rest Framework
для загрузки видео. Теперь я хотел добавить миниатюры к моим видео файлам. Всякий раз, когда объект Video сохраняется, я хотел создать миниатюру и установить ее поле thumbnail
.
Моя модель видео выглядит следующим образом:
class Video(models.Model):
created = models.DateTimeField(auto_now_add=True)
text = models.CharField(max_length=100, blank=True)
video = models.FileField(upload_to='Videos/',blank=True)
thumbnail = models.ImageField(upload_to = 'Images/', blank = True)
Мой обработчик сигналов выглядит следующим образом:
from moviepy.video.io.VideoFileClip import VideoFileClip
from posts.models import Video
from django.db.models.signals import post_save
from django.dispatch import receiver
from settingsFolderOfProject.settings import MEDIA_ROOT
import os
# when save() of Video is done, create_thumbnail_from_video() is called
@receiver(post_save, sender=Video)
def create_thumbnail_from_video(sender, instance, created, **kwargs):
if created:
# create the clip using moviepy's VideoFileClip class
clip = VideoFileClip(os.path.join(MEDIA_ROOT, instance.video.name))
# create the frame at 1st second and set it to instance's thumbnail field
instance.thumbnail = clip.save_frame(os.path.join(MEDIA_ROOT, 'Images/thumbnail.jpg'),t='00:00:01')
# save the instance
instance.save() # <--- I think this op does not work properly
Что я должен изменить? Файл миниатюр создается в папке, как и ожидалось, но Django не устанавливает поле thumbnail
моего экземпляра модели Video
. Поле thumbnail
созданного экземпляра Video
по-прежнему имеет значение null.