2016-11-02 1 views
0

私はdjango 1.8とpython 3.4を使用しています。jsonファイルを作成してから書き込みを行っています。その後、データベースに保存する必要がありますが、保存すると、エラー '_io.TextIOWrapper'オブジェクトには属性がありません'コミットされました'。誰でも私が間違っているところで助けてもらえますか? はここに私のviews.pyは右、書き込み可能なファイルをデータベースに保存しますか?

def convert_file(request): 
    url = request.GET.get('q', None) 
    r = requests.get(url, stream=True) 
    with open('file.csv', 'wb') as out_file: 
     shutil.copyfileobj(r.raw, out_file) 
    csvfile = open("file.csv", "r") 
    jsonfile = open("file.json", "w") 
    csv_rows = [] 
    reader = csv.DictReader(csvfile) 
    title = reader.fieldnames 
    try: 
     for row in reader: 
      csv_rows.extend([{title[i]: row[title[i]] for i in range(len(title))}]) 
    except: 
     pass 

    jsonfile.write(json.dumps(csv_rows, sort_keys=False, indent=4, separators=(',', ': '), ensure_ascii=False)) 

    os.remove("file.csv") 
    jsonfile.close() 

    new_json = ConvertedFile.objects.create() 
    new_json.file = jsonfile 
    new_jsone.save() 
+0

を見て持っていますが、あなたはそれを削除する前に、 'csvfile'を閉じる必要があります。たとえば、Windowsでクラッシュする可能性があります。 –

+0

@ Jean-FrançoisFabreありがとう、私の問題を克服するための提案? – Karan

+0

Jsonfileは閉じたファイルです。 new_jsonオブジェクトに渡しています。これは適切なタイプではなく、たとえそれがクローズドファイルであってもそうです。 –

答えて

0

エラーが最後の行にmodel.save()に提起IS-

class ConvertedFile(models.Model): 
    file = models.FileField(upload_to='json/upload', max_length=5000) 
    created_on = models.DateTimeField(auto_now_add=True) 

私のmodels.pyのですか? new_json.file = jsonfileより上の行が問題です。クローズド(平凡なpython)ファイルオブジェクトへの参照をdjangoからFileFieldに渡し、それを処理する方法がわかりません(例えば_commitedがありません)。

は多分無関係Django - how to create a file and save it to a model's FileField?

関連する問題