Djangoで、会社の得意先月別売上表を作成したいです。
下記の表のように、得意先別、月別の売上高を表した表形式の表示をしたいです。
このような表を作る時、
viewspy
1 2customers = Customer.Objects.all() #A,B,Cのこと 3month_list = ['2018年1月','2018年2月','2018年3月','2018年4月','2018年5月'] 4 5 6customer_sales = [] 7 8for customer in customers: 9 sales = Sales.objects.filter(customer=customer) 10 month_sales_list = [] 11 for month in month_list: 12 month_sales = sales.filter(date__range=(month.start_date, month.end_date)) 13 month_sales_list.append(month_sales) 14 15 # customerとsalesリストをtupleで持つ 16 customer_sales.append((customer, month_sales_list)) 17 18context = { 19 'month_list': month_list, 20 'customer_sales': customer_sales 21}
HTML
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>
のようになるみたいなのですが、
HTMLそれぞれで分からないことがあります。
HTMLの方で、
{% for s in sales %} <td>{{ s.amount }}</td>
の部分があると思いますが、元々views.pyに
sales = Sales.objects.filter(customer=customer)
という表記があったので、
sales.amountはsalesオブジェクトのカラム?ということであっているでしょうか?また、そうだとしたら、sales.objects.filterとすることでsalesオブジェクトを継承でき、amountまで使えるようになったということでしょうか?filterメソッドにそのような機能はないと思っていたので困惑してます…
また、sales = Sales.objects.filter(customer=customer)
のfilterメソッド中の(customer=customer)の意味が理解できないのですが、これはどういう意味なのでしょうか。「customerがcustomerであるオブジェクトを取得する」という意味が分かりません(他の例だとfilter(time=time)などを見たことがあります)。
以上2点、理解が浅いもので素人質問になってしまいますがお答えいただけたらと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/16 07:07
2020/01/16 09:02
2020/01/16 10:08
2020/01/21 11:58