首页 文章

在Django模型中创建文件并保存(AttributeError?)

提问于
浏览
1

我有一个巨大的字符串,我想将其保存为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()

这会引起错误,

'_ oo.TextIOWrapper'对象没有属性'_committed'

但在网上寻找解决方案后,我走到了尽头 . 任何建议将不胜感激!

环境:请求方法:GET请求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']回溯:文件“\ VENV \ LIB \站点包\ Django的\核心\处理器\ exception.py “在内部41. response = get_response(请求)文件”_get_response中的文件“\ venv \ lib \ site-packages \ django \ core \ handlers \ base.py”.response = self.process_exception_by_middleware(e,request)File“ \ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @ \ auth \ decorators.py“在_wrapped_view中23.返回view_func(request,* args,** kwargs)文件”\ venv \ project \ app \ views.py“在dbkarga 93. app.postgis2geojson.getData(gis_id,db_name, db_user,db_pass,db_addr,db_port,t)getData 119中的文件“\ venv \ project \ app \ postgis2geojson.py” . my_obj.save()文件“\ venv \ lib \ site-packages \ django \ db \ models \ base .py“在保存806. force_update = force_update,update_fields = update_fields)文件”\ venv \ lib \ site-packages \ django \ db \ models \ base.py“在save_base 836中 . 更新= self._save_table(raw,cls, force_insert,force_update,using,update_fields)_save_table 922中的文件“\ venv \ lib \ site-packages \ django \ db \ models \ base.py” . result = self._do_insert(cls._base_manager,using,fields,update_pk,raw )_do_insert 961中的文件“\ venv \ lib \ site-packages \ django \ db \ models \ base.py” . g = using,raw = raw)在manager_method 85中输入文件“\ venv \ lib \ site-packages \ django \ db \ models \ manager.py” . 返回getattr(self.get_queryset(),name)(* args,** kwargs)在_insert 1061中输入文件“\ venv \ lib \ site-packages \ django \ db \ models \ query.py” . 返回query.get_compiler(using = using).execute_sql(return_id)文件“\ venv \ lib \ site- package \ django \ db \ models \ sql \ compiler.py“在execute_sql 1098. for sql,params in self.as_sql():file”\ venv \ lib \ site-packages \ django \ db \ models \ sql \ compiler . py“in as_sql 1051. for obj in self.query.objs File”\ venv \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py“in 1051. for obj in self.query.objs File” 1050中的\ venv \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py“ . [self.prepare_value(field,self.pre_save_val(field,obj))表示字段中的字段]文件”\ venv \ pre_save_val 1000中的lib \ site-packages \ django \ db \ models \ sql \ compiler.py“ . 返回field.pre_save(obj,add = True)文件”\ venv \ lib \ site-packages \ django \ db \ models \在pre_save 295中的fields \ files.py“ . 如果是file而不是file.co mmitted:异常类型:/ app / dbkarga / 6中的AttributeError /异常值:' io.TextIOWrapper'对象没有属性'_committed'

1 回答

  • 0

    好的,我现在看到你的问题 .

    Outfile必须是 django.core.files.Filedjango.core.files.base.ContentFile 的实例(有关详细信息,请参见手册here) .

    您可以使用的两个选择是:

    # 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()
    

相关问题