Djangoを用いたWEBサイトを作っていますが、クラスベースビューでデータベースを検索して一覧表示するのはできました。
そこに検索結果のEXCEL出力をしたいのですが、調べても全件出力の参考記事しか見つかりません。(内容的にCSVと同じなのでCSV出力の参考記事を探して作ってました)
理想は、出力ボタンクリック→検索フォームの値を取得し、取得した値でDBを検索→for文でEXCELを書き込んで出力。というような感じです。
出力用の関数を作って動作したのでビューに乗せようとした所、うまくいきません(理解が間違っている?)。
何かアドバイスありましたら教えて頂けると幸いです。
HTML
1 2<input type="submit" name="excel_export" value="エクセル出力">
Python
1#urls.py 2path('excel_export/', views.IndexView.excel_export, name='excel_export'),
Python
1#views.py 2class IndexView(generic.ListView): 3 model = dblist 4 template_name = 'mysite/index.html' 5 6 #検索、一覧表示 7 def get_context_data(self, **kwargs): 8 #省略 9 return context 10 11 #ボタンクリックでEXCEL出力 12 def excel_export(self, request): 13 #検索値取得 14 #start = self.request.GET.get('start') 15 #end = self.request.GET.get('end') 16 #SearchNAME = self.request.GET.get('SearchNAME') 17 18 output = BytesIO() 19 book = Workbook(output) 20 #シート名 21 sheet = book.add_worksheet('DBSearch') 22 #ヘッダー 第一引数が行、第二引数が列を表す 23 sheet.write(0,0, 'ID') 24 sheet.write(0,1, 'NAME') 25 26 #データベース検索 27 #とりあえず検索は固定値 28 #db_data = dblist.objects.filter(ID__gte=start,ID__lte=end,NAME__contains=SearchNAME).order_by('ID') 29 db_data = dblist.objects.filter(ID__gte='001',ID__lte='200',NAME__contains='太朗').order_by('ID') 30 31 row_num = 1 32 for data in db_data: 33 sheet.write(row_num, 0, data.ID) 34 sheet.write(row_num, 1, data.NAME) 35 36 row_num += 1 37 38 book.close() 39 40 # construct response 41 output.seek(0) 42 response = HttpResponse(output.read(), content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 43 response['Content-Disposition'] = "attachment; filename=DBList.xlsx" 44 45 return response
環境
Python 3.7
Django 2.1.15
pyodbc 4.0.30 (SQLServer接続)
XlsxWriter 1.2.8 (EXCEL出力)
回答2件
あなたの回答
tips
プレビュー