我有一个视频模型,它使用pymovieclip来获取视频文件的持续时间,然后尝试将其添加到正在保存的模型中。我能够毫无问题地获取信息,但将其保存到实例不起作用
@receiver(post_save, sender=Video)
def save_user_profile(sender, instance, **kwargs):
print('Saved: {}'.format(instance.id))
video = Video.objects.get(pk=instance.id)
path = os.path.join(settings.MEDIA_ROOT,"{}".format(video.video))
duration = VideoFileClip(path).duration
print('Saved: {}'.format(duration))
actual = round((duration / 60), 2)
video.video_duration = actual
`
但它不起作用。添加".save()"
也会使服务器处于循环中
答案 0 :(得分:0)
您无需再次获取Video对象。实例参数已经引用了正在保存的视频实例。
尝试做:
instance.video_duration = actual
instance.save()
答案 1 :(得分:0)
在instance.save()
上拨打post_save
会重新触发post_save
信号;从而启动无限循环。
您最好使用pre_save作为在实例上添加持续时间的用例。
save()
将在信号处理程序结束后发出,因此无需再次在save()
接收器/处理程序上调用pre_save
。