Django FileField在调用Python对象时超出了模型最大递归深度 [英] Django FileField in model maximum recursion depth exceeded while calling a Python object
本文介绍了Django FileField在调用Python对象时超出了模型最大递归深度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的模型:
class Movie(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=1500)
publish_date = models.DateField()
file_1080p = models.FileField(upload_to=generate_filename_movie, validators=[validate_video])
file_720p = models.FileField(upload_to=generate_filename_movie_720)
file_480p = models.FileField(upload_to='temp/')
subtitles = models.FileField(upload_to=generate_filename_subtitle_movie, validators=[validate_subtitles])
already_converted = bool(False)
我的保存功能:
def save(self, *args, **kwargs):
if self.already_converted == False:
# todo convert files
self.already_converted = True
if self.subtitles.path.endswith('.srt'): # srt subtitle should process
import re
m = re.sub(r'([0-9]{2}:[0-9]{2}:[0-9]{2}),([0-9]{3})', r'\1.\2', self.subtitles.read())
from django.core.files.base import ContentFile
filenameToSave = generate_filename_subtitle_movie(0, self.subtitles.name)
self.subtitles.save(filenameToSave, ContentFile("WEBVTT\n\n" + m))
super(Movie, self).save(*args, **kwargs)
错误发生在这里: self.subtitles.save (filenameToSave,ContentFile(WEBVTT\\\
\\\
+ m))
谢谢。
推荐答案
在 FileField
上调用保存
将默认触发它的模型的保存
方法。您可以通过向 FileField
的保存
方法提供另外的第三个参数来绕过它。
Calling the save
method on a FileField
will trigger it's model's save
method by default. You can bypass it by providing an additional third argument to the FileField
's save
method.
self.subtitles.save(filenameToSave, ContentFile("WEBVTT\n\n" + m), False)
看看:
这篇关于Django FileField在调用Python对象时超出了模型最大递归深度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文