Django FileField在调用Python对象时超出了模型最大递归深度 [英] Django FileField in model maximum recursion depth exceeded while calling a Python object

查看:145
本文介绍了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)

看看:

https://docs.djangoproject.com/en/ dev / ref / models / fields /#django.db.models.fields.files.FieldFile.save

这篇关于Django FileField在调用Python对象时超出了模型最大递归深度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆