2017-07-21 107 views
0

我有一個視頻模型,它使用pymovieclip抓住視頻文件的持續時間,然後嘗試將其添加到正在保存的模型。我能夠抓住信息沒有問題,但保存到實例不起作用使用信號保存在Django模型

@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

您的保存函數在依賴模型上實例化另一個更新,從而觸發另一個更新。檢查無限循環情況。 – kawadhiya21

+0

是的,我嘗試了幾種方法,似乎都沒有工作 –

回答

0

您不需要再次獲取Video對象。實例參數已經引用了正在保存的視頻實例。

儘量做到:

instance.video_duration = actual 
instance.save() 
+0

雖然這不起作用 –

0

post_save調用instance.save()將再次觸發post_save信號;從而啓動無限循環。

您最好使用pre_save作爲在實例上添加持續時間的用例。

save()將在信號處理程序結束後發出,因此不需要再次在pre_save接收器/處理程序上調用save()