在django模型上使用信号进行保存
我有一个视频模型,它使用pymovieclip获取视频文件的持续时间,然后尝试将其添加到正在保存的模型中。我能够抓取信息没有问题,但保存到实例不起作用在django模型上使用信号进行保存,django,Django,我有一个视频模型,它使用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)
@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()”
也会使服务器处于循环中您不需要再次获取视频对象。实例参数已引用正在保存的视频实例
试着做:
instance.video_duration = actual
instance.save()
在
post\u save
上调用instance.save()
将重新触发post\u save
信号;从而启动了一个无限循环
您最好使用在实例上添加持续时间的用例
save()
将在信号处理程序结束后发出,因此无需在pre\u save
接收器/处理程序上再次调用save()
。您的save函数实例化依赖模型上的另一个更新,从而触发另一个更新。检查无限循环的情况。是的,我试过几种方法,似乎都不管用