在django模型上使用信号进行保存

在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)

我有一个视频模型,它使用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()”
也会使服务器处于循环中

您不需要再次获取视频对象。实例参数已引用正在保存的视频实例

试着做:

instance.video_duration = actual
instance.save()

post\u save
上调用
instance.save()
将重新触发
post\u save
信号;从而启动了一个无限循环

您最好使用在实例上添加持续时间的用例


save()
将在信号处理程序结束后发出,因此无需在
pre\u save
接收器/处理程序上再次调用
save()

您的save函数实例化依赖模型上的另一个更新,从而触发另一个更新。检查无限循环的情况。是的,我试过几种方法,似乎都不管用