質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3808閲覧

【Django】表形式でデータを表示する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/03/14 01:20

編集2018/03/14 05:36

Djangoで、会社の得意先月別売上表を作成したいです。
下記の表のように、得意先別、月別の売上高を表した表形式の表示をしたいです。このような表を作る時、どのようにデータを渡したら良いか、分かりません。
得意先別月別売上高

現状のviews.pyは、下記のとおりです。

python

1# views.py 2month_list = ['2018.1月', '2018.2月', '2018.3月'・・・] # 実際はこのmonth_listを作るためのコードがありますが、ここでは単純化のためハードコーディングしたものとしています。 3sales = Sales.objects.all()  # 売上高モデルの全データ 4customers = Custmer.objects.all() 5for customer in customers: 6 sales = Sales.objects.filter(customer=customer) # 得意先別売上高をピックアップ 7 month_sales_list = [] # 各月の売上を入れるための空のリスト 8 for month in month_list: 9 month_sales = sales.filter(date__range=(month.start_date, month.end_date)) # 月別売上高をピックアップ 10 month_sales_list.append(month_sales) # 2018.1月売上、2018.2月売上、… 11 12 # ここで、customerにmonth_listというアトリビュートを持たせることができれば解決するのではないかと思います。 13 14template = loader.get_template('test/sales.html') 15context = { 16 'month_list': month_list, 17 'customers': customers 18} 19return HttpResponse(template.render(context, request))

上記のmonth_listには、start_date、end_dateというattributeがあります。例えば2018.1月にはstart_date:2018.1.1、end_date:2018.1.31というデータが入っています。
テンプレートは、下記のとおり作っています。

html

1<!--sales.html--> 2<table> 3 <tr> 4 {% for month in month_list %} 5 <th>{{month}}</th> 6 {% endfor %} 7 </tr> 8 {% for customer in customers %} # 得意先毎にループを回します。 9 <tr> 10 <td>{{customer.name}}</td> # 得意先名 11 {% for month_sales in customer.month_sales_list %} 12 <td>{{month_sales.amount}}</td> # 月毎にループを回します。 13 </tr> 14 {% endfor %} 15</table>

上記のviews.pyにおいて、month_listというアトリビュートをcustomerに持たせることができれば、うまく動くのかと思いますが、どうしたらそれができるか、分かりません。
もしくは、このような時一般的に取られる方法やもっと良い方法があれば、教えて頂きたいです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tell_k

2018/03/14 04:22

month_sales という変数が使われてませんがなぜでしょうか。ご説明されてる内容と、コードの内容に剥離があって回答しづらい状態です。
退会済みユーザー

退会済みユーザー

2018/03/14 05:39

失礼しました。month_sales_list = [] とmonth_sales_list.append(month_sales)を追記しました。customerとmonth_sales_listを紐づけられておらず、そこが紐づけられればうまくいくのではないかと思います。
guest

回答1

0

ベストアンサー

customer と salesのリストは取得できてるので、それを単純なtupleで持つようにすれば良いと思いました。

python

1customer_sales = [] 2 3for customer in customers: 4 sales = Sales.objects.filter(customer=customer) 5 month_sales_list = [] 6 for month in month_list: 7 month_sales = sales.filter(date__range=(month.start_date, month.end_date)) 8 month_sales_list.append(month_sales) 9 10 # customerとsalesリストをtupleで持つ 11 customer_sales.append((customer, month_sales_list)) 12 13context = { 14 'month_list': month_list, 15 'customer_sales': customer_sales 16}

template

1<table> 2 <tr> 3 <th>顧客名</th> 4 {% for month in month_list %} 5 <th>{{month}}</th> 6 {% endfor %} 7 </tr> 8 {% for customer, sales in customer_sales %} 9 <tr> 10 <td>{{ customer.name }}</td> 11 {% for s in sales %} 12 <td>{{ s.amount }}</td> 13 {% endfor %} 14 </tr> 15 {% endfor %} 16</table> 17

投稿2018/03/14 07:01

tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/14 07:56

できました。ありがとうございましたm(__)m タプルを使って、項目とそのデータのリストをセットで持たせれば良いのですね。
tell_k

2018/03/14 07:57

はい。おっしゃる通りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問