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\n\n" + m))
谢谢。
1 个回答
2
在一个FileField
上调用save
方法时,默认会触发它所在模型的save
方法。你可以通过给FileField
的save
方法提供一个额外的第三个参数来绕过这个默认行为。
self.subtitles.save(filenameToSave, ContentFile("WEBVTT\n\n" + m), False)
可以看看这个链接: