質問編集履歴
3
文字
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
文字
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
|
+

|
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">«</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">»</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
質問の修正
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
|