python-AttributeError:“文件”对象没有属性“ _committed”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-AttributeError:“文件”对象没有属性“ _committed”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1373字,纯文字阅读大概需要2分钟。
内容图文
我的模型中有一个DjangoFileField.我试图将音频类型从FielField转换为mp3,然后再次尝试保存.但是在转换类型并使用pydub将其导出后,它返回以下错误
AttributeError: 'file' object has no attribute '_committed'
我的代码是这样的
def get_from_function(AudioSegment, format):
form = "from_{0}".format(format)
print form
if hasattr(AudioSegment, form):
return getattr(AudioSegment, form)
return None
audio = request.FILES.get('audio', None)
if audio:
name_list = audio.name.rsplit(".")
voice_format =name_list[1]
from_format = get_from_function(AudioSegment, voice_format)
if from_format and callable(from_format):
sound = from_format(audio)
audio = sound.export("media/{0}".format(name_list[0]), mp3")
当我打印音频时,它会打印
<open file 'media/barsandtone', mode 'wb+' at 0x7f771e5e2f60>
当我打印文件类型时
<type 'file'>
但是当我将音频字段分配给Django模型时
Mymodel.objects.create(audio=audio)
它给出了错误
AttributeError at /create/
'file' object has no attribute '_committed'
将导出的文件保存到Django模型中的正确方法是什么
解决方法:
django通常需要一个ContentFile来执行此操作,以将数据流传递给它,并且它不能像通常将参数传递给模型那样工作.做到这一点的正确方法如下
from django.core.files.base import ContentFile
[...]
mymodel = Mymodel()
mymodel.audio.save(audio.name, ContentFile(audio.read()))
不要忘记将流传递到ContentFile.如果您将其传递给ContentFile(audio),则Django不会引发任何错误,但在那种情况下,您将不会保存文件内容.
内容总结
以上是互联网集市为您收集整理的python-AttributeError:“文件”对象没有属性“ _committed”全部内容,希望文章能够帮你解决python-AttributeError:“文件”对象没有属性“ _committed”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。