使用信号保存在django模型上

时间:2017-07-21 12:32:06

标签: 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)
    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()"也会使服务器处于循环中

2 个答案:

答案 0 :(得分:0)

您无需再次获取Video对象。实例参数已经引用了正在保存的视频实例。

尝试做:

instance.video_duration = actual
instance.save()

答案 1 :(得分:0)

instance.save()上拨打post_save会重新触发post_save信号;从而启动无限循环。

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

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