質問するログイン新規登録

質問編集履歴

3

文字

2021/01/30 06:30

投稿

taro__
taro__

スコア1

title CHANGED
File without changes
body CHANGED
@@ -14,9 +14,8 @@
14
14
  TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'
15
15
  ```
16
16
 
17
- ### 該当のソースコード
18
- https://github.com/taroimagawa/money
19
17
 
18
+
20
19
  ### 試したこと
21
20
  型が違うとのことだったため、以下のコードを実行しましたが、解決できませんでした。
22
21
  avg_amount = int(Money.objects.aggregate(Sum('amount'))['amount__sum'])/3

2

文字

2021/01/30 06:30

投稿

taro__
taro__

スコア1

title CHANGED
File without changes
body CHANGED
@@ -23,4 +23,141 @@
23
23
 
24
24
  ### 補足情報(FW/ツールのバージョンなど)
25
25
  python 3.9.1
26
- django 3.1.5
26
+ django 3.1.5
27
+
28
+
29
+
30
+ ###追記
31
+ 画像を用いて質問したかったので、もう一度投稿させていただきます。
32
+
33
+ 金額を入力して割り勘金額を動的に表示するプログラムを実装中です。
34
+ 画像の赤線部分が今回解決したいエラー箇所です。
35
+ ![イメージ説明](55865b42953eef99fae0d2779f1d2a67.png)
36
+
37
+
38
+
39
+
40
+ ### 該当のソースコード(views.py)
41
+ ```
42
+ class MoneyListView(ListView):
43
+ model = Money
44
+ context_object_name = 'money_list'
45
+ paginate_by = 3
46
+
47
+
48
+ #db aggregate
49
+ def get_context_data(self, **kwargs):
50
+ context = super().get_context_data(**kwargs)
51
+
52
+ #sum
53
+ total_amount = Money.objects.aggregate(Sum('amount'))['amount__sum']
54
+ context["total_amount"] = total_amount
55
+
56
+ #average
57
+ avg_amount = Money.objects.aggregate(Sum('amount'))['amount__sum']/3
58
+ context["avg_amount"] = avg_amount
59
+
60
+ #payment/per name=Taro
61
+ pay_taro = Money.objects.filter(name='Taro').aggregate(Sum('amount'))['amount__sum']
62
+ context["pay_taro"] = pay_taro
63
+
64
+ #payment/per name=Koki
65
+ pay_koki = Money.objects.filter(name='Koki').aggregate(Sum('amount'))['amount__sum']
66
+ context["pay_koki"] = pay_koki
67
+
68
+ #payment/per name=Kaze
69
+ pay_kaze = Money.objects.filter(name='Kaze').aggregate(Sum('amount'))['amount__sum']
70
+ context["pay_kaze"] = pay_kaze
71
+
72
+ #deficiency/per name=Taro
73
+ deficiency_taro = avg_amount - pay_taro
74
+ context["deficiency_taro"] = deficiency_taro
75
+
76
+ #deficiency/per name=Koki
77
+ deficiency_koki = avg_amount - pay_koki
78
+ context["deficiency_koki"] = deficiency_koki
79
+
80
+ #deficiency/per name=Kaze
81
+ deficiency_kaze = avg_amount - pay_kaze
82
+ context["deficiency_kaze"] = deficiency_kaze
83
+
84
+ #create graph
85
+ x_list = ['Taro', 'Koki', 'Kaze']
86
+ y_list = [pay_taro, pay_koki, pay_kaze]
87
+ create_graph(x_list, y_list)
88
+ graph = get_image()
89
+ context['graph'] = graph
90
+
91
+ return context
92
+
93
+ ```
94
+
95
+ ### 該当のソースコード(htmlファイル)
96
+ ```
97
+ {% extends 'base.html' %}
98
+
99
+ {% block body %}
100
+ <div class="container">
101
+ <p><a href="{% url 'create' %}" class="btn btn-secondary">追加</a></p>
102
+ {% for money in object_list %}
103
+ <div class="alert alert-secondary" role="alert">
104
+ <p>{{ money.purpose }}</p>
105
+ <p> {{ money.name }} : {{ money.amount }}円 </p>
106
+ <a href="{% url 'detail' money.pk %}" class="btn btn-secondary btn-sm" tabindex="-1" role="button" aria-disabled="true">詳細</a>
107
+ <a href="{% url 'update' money.pk %}" class="btn btn-secondary btn-sm" tabindex="-1" role="button" aria-disabled="true">編集</a>
108
+ <a href="{% url 'delete' money.pk %}" class="btn btn-secondary btn-sm" tabindex="-1" role="button" aria-disabled="true">削除</a>
109
+ </div>
110
+ {% endfor %}
111
+ <div class="alert alert-primary" role="alert">
112
+ <h6>総合計金額</h6>
113
+ <p>{{ total_amount }}円</p>
114
+ <h6>割り勘金額</h6>
115
+ <p>{{ avg_amount|floatformat:1 }}円</p>
116
+ <h6>現在の支払金額</h6>
117
+ <p>Taro:{{ pay_taro }}円<br>
118
+ Koki:{{ pay_koki }}円<br>
119
+ Kaze:{{ pay_kaze }}円</p>
120
+ <h6>支払い不足金額</h6>
121
+ <p>Taro:{{ deficiency_taro|floatformat:1 }}円<br>
122
+ Koki:{{ deficiency_koki|floatformat:1 }}円<br>
123
+ Kaze:{{ deficiency_kaze|floatformat:1 }}円</p>
124
+ <p>
125
+ ***<br>
126
+ 〜支払い不足金額について〜<br>
127
+ +n円:n円払ってもらい過ぎ<br>
128
+ -n円:n円払い過ぎ<br>
129
+ ***
130
+ </p>
131
+ </div>
132
+
133
+ <img src="data:image/png;base64, {{ graph | safe }} " alt="">
134
+
135
+ <nav aria-label="Page navigation example">
136
+ <ul class="pagination">
137
+ {% if page_obj.has_previous %}
138
+ <li class="page-item">
139
+ <a class="page-link" href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">
140
+ <span aria-hidden="true">&laquo;</span>
141
+ <span class="sr-only">Previous</span>
142
+ </a>
143
+ </li>
144
+ {% endif %}
145
+
146
+ {% for page in paginator.page_range %}
147
+ <li {% if page == page_obj.number %} class="page-item active" {% endif %}><a class="page-link" href="?page={{ page }}">{{ page }}</a></li>
148
+ {% endfor %}
149
+
150
+ {% if page_obj.has_next %}
151
+ <li class="page-item">
152
+ <a class="page-link" href="?page={{ page_obj.next_page_number }}" aria-label="Next">
153
+ <span aria-hidden="true">&raquo;</span>
154
+ <span class="sr-only">Next</span>
155
+ </a>
156
+ </li>
157
+ {% endif %}
158
+ </ul>
159
+ </nav>
160
+ </div>
161
+ {% endblock %}
162
+
163
+ ```

1

質問の修正

2021/01/30 05:23

投稿

taro__
taro__

スコア1

title CHANGED
File without changes
body CHANGED
@@ -2,8 +2,11 @@
2
2
 
3
3
  テストコードを実行した際に発生したエラーを解決したいです。
4
4
  ランサーバーを起動すると正常に動くのですが、テストコードを実行するとエラーが発生します。
5
+ 初歩的な質問かもしれませんが、解決策をご教授していただけないでしょうか。
5
6
 
6
7
  ### 発生している問題・エラーメッセージ
8
+ 型を合わせて計算する方法がわかりません。
9
+ データベースの集計した値を avg_amount = Money.objects.aggregate(Sum('amount'))['amount__sum']/3 と代入したのですが、TypeError: unsupported operand type(s) for /: 'NoneType' and 'int' とエラーが出ました。
7
10
 
8
11
  ```
9
12
  File "/Users/taro/pj/env/moneypj/money/views.py", line 31, in get_context_data