我有一个巨大的字符串,我想保存为Django模型中的文件。为了做到这一点,我编写了以下代码:
with open("new_file", 'w') as outfile:
outfile.write(myString)
outfile.close()
my_obj = Model_Type(obj_name = name, my_file = outfile)
my_obj.save()
这产生了一个错误,
’_ io。TextIOWrapper对象没有属性“_committed”
但是在网上搜索解决方案后,我陷入了死胡同。任何建议将不胜感激!
环境:
请求方法:获取请求 URL:http://127.0.0.1:8000/app/dbkarga/6/
Django版本:1.11.1 Python版本:3.6.1已安装应用程序:['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app.apps.AppConfig']已安装中间件:['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware']
回溯:
inner 41中的文件“\ venv \ lib \ site-packages \ django \ core \ handlers \ exception . py”。响应= get_response(请求)
文件“\venv\lib\site packages\django\core\handlers\base.py”在_get_response 187.response=self中。process_exception_by_middleware(e,请求)
_get_response185中的文件"\venv\lib\site-pack\django\core\handler\base.py"。
文件“\ venv \ lib \ site-packages \ django \ contrib \ auth \ decorators . py”in _ wrapped _ view 23。return view_func(request,*args,**kwargs)
dbkarga 93中的文件“\venv\project\app\views.py”。app . postgis 2g eojson . get data(GIS _ id,db_name,db_user,db_pass,db_addr,db_port,t)
getData 119中的文件"\venv\project\app\postgis2geojson.py"my_obj.save()
save 806 中的文件“\venv\lib\site-packages\django\db\models\base.py”。force_update=force_update,update_fields=update_fields)
save_base836中的文件\venv\lib\site-包\django\db\模型\base.py。更新=自己。_save_table(原始、cls、force_insert、force_update、使用、update_fields)
保存表922中的文件“\ venv \ lib \ site-packages \ django \ db \ models \ base . py”。结果=自己。_do_insert(cls。_base_manager,使用,字段,update_pk,raw)
_do_insert 961中的文件“\venv\lib\site packages\django\db\models\base.py.using=using,raw=raw”)
manager_method 85中的文件“\venv\lib\site packages\django\db\models\manager.py”。返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“\ venv \ lib \ site-packages \ django \ db \ models \ query . py”in _ insert 1061。返回query.get_compiler(using=using)。执行sql(返回标识)
execute_sql 1098中的文件“\ venv \ lib \ site-packages \ django \ db \ models \ SQL \ compiler . py”。对于sql,self.as_sql()中的参数:
as_sql1051中的文件"\venv\lib\site-pack\django\db\model\sql\compiler.py"。对于self.query.objs中的obj
1051中的文件“\ venv \ lib \ site-packages \ django \ db \ models \ SQL \ compiler . py”。对于self.query.objs中的obj
1050中的文件“\ venv \ lib \ site-packages \ django \ db \ models \ SQL \ compiler . py”。[字段中字段的self.prepare_value(field,self.pre_save_val(field,obj))
文件“\venv\lib\site-packages\django\db\models\sql\compiler.py” in pre_save_val 1000.返回field.pre_save(obj, add=True)
pre_save 295 中的文件“\venv\lib\site-packages\django\db\models\fields\files.py”。如果文件而不是file._committed:
异常类型:/app/dbkarga/6处的attribute error/Exception Value:“_ io”。“TextIOWrapper”对象没有属性“_committed”
好吧,我现在明白你的问题了。
输出文件必须是 django.core.文件.文件
或 django.core.文件.base.Content 文件的
实例(有关详细信息,请参阅此处的手册)。
您可以使用的两个选择是:
# Using File
outfile = open('/path/to/file')
my_obj = Model_Type(obj_name = name, my_file = File(outfile))
# Using ContentFile
my_obj = Model_Type(obj_name = name, my_file = ContentFile('Your very long string goes here'))
更新了如何读取文件
f = Model_Type.objects.all().get(id=0).my_file
f.open(mode='rb')
lines = f.readlines()
f.close()
问题内容: 这是我的模特。我想要做的是生成一个新文件,并在保存模型实例时覆盖现有文件: 我看到很多有关如何上传文件的文档。但是,如何生成文件,将其分配给模型字段并将Django存储在正确的位置呢? 问题答案: 你想看看Django文档中的FileField和FieldFile,尤其是FieldFile.save()。 基本上,声明为的字段在访问时为你提供class的实例,该实例为你提供了几种与基础
问题内容: 我想创建一个模型对象,例如Person,如果不存在person的id,否则我将获得该person对象。 创建新人员的代码如下: 但是我不知道在哪里检查并获取现有的人对象。 问题答案: Django中已经有一个,https://docs.djangoproject.com/en/dev/ref/models/querysets/#get- or-create 对你来说可能是:
问题内容: 这是有关django的问题。我有一个模特说“汽车”。这将具有一些基本字段,例如“颜色”,“车辆所有者名称”,“车辆成本”。 我想提供一个表格,用户可以根据他要添加的汽车添加额外的字段。例如,如果用户添加“汽车”,则他将在运行时动态地在表单中添加其他字段,例如“汽车里程”,“校准制造商”。假设用户想要添加“卡车”,他将添加“可以运载的货物”,“许可证”等。 如何在Django中实现这一目
问题内容: 在保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在更新说明时不想要。 问题答案: 一些想法: 不确定是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。
问题内容: 保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在描述更新时不想要。 问题答案: 一些想法: 不知道它是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。
问题内容: 我有一个Scrapy项目,正在尝试将输出项保存为Django模型定义中的对象(我不使用DjangoItem)。 我正在按此处指定的方式导入Django设置。 在我的Scrapy项目中,我有一个管道类,该类最终处理所有项目并将其保存到数据库中: 但是,发生了一些奇怪的事情,对于第一个项目,我得到了一个错误(请参阅下文)。对于其余项目,一切都很好。假设我要保存7个项目,因此我在第一个保存错