前提・実現したいこと
Python:3.7.1
Django:2.1.2
Python学習中の初心者であることをご容赦ください。
Python・DjangoでWebアプリみたいなものを作ろうと考えています。
アプリ自体は他の方が公開しているテンプレートを利用したうえで
CSVからインポートする機能を加えようと思ったのですが、
下記エラーが発生します。
サンプルコードのコピペがメインのため
変なコードが入っているとは思いますが、
知恵をお貸しいただけないでしょうか。
発生している問題・エラーメッセージ
2019-02-27 15:03:02,136 [ERROR] C:\Users\user\Desktop\instantapp\env\l ib\site-packages\django\utils\log.py:228 Internal Server Error: /import/ Traceback (most recent call last): File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\django\ core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\django\ core\handlers\base.py", line 126, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\django\ core\handlers\base.py", line 124, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\django\ views\generic\base.py", line 68, in view return self.dispatch(request, *args, **kwargs) File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\django\ views\generic\base.py", line 88, in dispatch return handler(request, *args, **kwargs) File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\django\ views\generic\edit.py", line 142, in post return self.form_valid(form) File "C:\Users\user\Desktop\instantapp\app\views.py", line 188, in f orm_valid for row in reader: File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\unicode csv\py3.py", line 55, in __next__ return self.reader.__next__() File "C:\Users\user\Desktop\instantapp\env\lib\site-packages\unicode csv\py3.py", line 51, in <genexpr> f = (bs.decode(encoding, errors=errors) for bs in f) AttributeError: 'str' object has no attribute 'decode' 2019-02-27 15:03:02,148 [ERROR] C:\Users\user\Desktop\instantapp\env\l ib\site-packages\django\core\servers\basehttp.py:124 "POST /import/ HTTP/1.1" 50 0 88777
該当のソースコード
Pyhon
1・views.py 2 3import unicodecsv as csv 4import urllib 5import io 6from django.views import generic 7from django.http import HttpResponse 8from django.urls import reverse_lazy 9 10from .forms import CSVUploadForm 11from .models import Item 12 13class ItemImport(generic.FormView): 14 template_name = 'app/item_import.html' 15 success_url = reverse_lazy('index') 16 form_class = CSVUploadForm 17 18 def form_valid(self, form): 19 csvfile = io.TextIOWrapper(form.cleaned_data['file'], encoding='cp932') 20 reader = csv.reader(csvfile) 21 for row in reader: 22 Item, created = Item.objects.get_or_create(pk=row[0]) 23 Item.name = row[1] 24 Item.save() 25 return super().form_valid(form) 26 27・forms.py 28 29class CSVUploadForm(forms.Form): 30 file = forms.FileField(label='CSVファイル') 31 32・urls.py 33 34urlpatterns = [ 35 path('import/', views.ItemImport.as_view(), name='import'), 36] 37 38
HTML
1・item_import.html 2 3{% extends 'app/_base.html' %} 4 5{% block headertitle %} 6CSVインポート 7{% endblock %} 8 9{% block content %} 10<form action="" method="POST" enctype="multipart/form-data"> 11 <p>ファイルを選択ボタンをクリックして、アップロードするCSVファイルを選択します</p> 12 {% csrf_token %} 13 <div class="form-group"> 14 {{form.file}} 15 </div> 16 <br/> 17 <button type="submit">送信</button> 18{% endblock %}
試したこと
・アプリ作成、機能追加の参考にしたサイト
https://qiita.com/okoppe8/items/4cc0f87ea933749f5a49
上記サイトを元にCSVのインポート・エクスポート機能を加えたく
下記サイトを参考にコードを追加しています。
https://qiita.com/t-iguchi/items/d2862e7ef7ec7f1b07e5
https://narito.ninja/blog/detail/60/
CSVエクスポートの機能を追加した際にcp932でエンコードする。
という記事を見つけたため、cp932でエクスポートをしています。
試しにviews.pyの
csvfile = io.TextIOWrapper(form.cleaned_data['file'], encoding='cp932')
上記部分でencodingをutf-8にし、utf-8のファイルをインポートしましたが
同様のエラーが発生しました。
どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー