回答編集履歴

2

追加

2021/01/30 05:55

投稿

退会済みユーザー
test CHANGED
@@ -46,9 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- 対策として、たとえばTaroのデータが不存在のとき
49
+ 対策として、たとえばTaroのデータが不存在のとき、現状は
50
-
51
- 現状は
52
50
 
53
51
  money\money\views.py
54
52
 
@@ -60,9 +58,65 @@
60
58
 
61
59
  がNoneになってしまっています。
62
60
 
63
- これをNoneではなく、ゼロが返ってくるようにすればよいのでと思います。
61
+ これをNoneではなく、ゼロが返ってくるようにすればエラーなくなります。
64
62
 
65
63
 
64
+
65
+ 例:total_amount及びpay_(個人名)に対して、`or 0`をつけて、agregateの計算結果がNoneの場合はゼロが代入されるようにする。
66
+
67
+ money\money\views.py
68
+
69
+ ```
70
+
71
+ (略)
72
+
73
+ #db aggregate
74
+
75
+ def get_context_data(self, **kwargs):
76
+
77
+ context = super().get_context_data(**kwargs)
78
+
79
+
80
+
81
+ #sum
82
+
83
+ total_amount = Money.objects.aggregate(Sum('amount'))['amount__sum'] or 0
84
+
85
+ context["total_amount"] = total_amount
86
+
87
+
88
+
89
+ #average
90
+
91
+ avg_amount = total_amount/3
92
+
93
+ context["avg_amount"] = avg_amount
94
+
95
+
96
+
97
+ #payment/per name=Taro
98
+
99
+ pay_taro = Money.objects.filter(name='Taro').aggregate(Sum('amount'))['amount__sum'] or 0
100
+
101
+ context["pay_taro"] = pay_taro
102
+
103
+
104
+
105
+ #payment/per name=Koki
106
+
107
+ pay_koki = Money.objects.filter(name='Koki').aggregate(Sum('amount'))['amount__sum'] or 0
108
+
109
+ context["pay_koki"] = pay_koki
110
+
111
+
112
+
113
+ #payment/per name=Kaze
114
+
115
+ pay_kaze = Money.objects.filter(name='Kaze').aggregate(Sum('amount'))['amount__sum'] or 0
116
+
117
+ context["pay_kaze"] = pay_kaze
118
+
119
+ ```
66
120
 
67
121
  ただしこれは応急対策であって、deficiencyおよび全容がどういう仕様なのか明らかにしていただかないと、正しい答えは導けないと思います。
68
122
 

1

追記

2021/01/30 05:55

投稿

退会済みユーザー
test CHANGED
@@ -61,3 +61,13 @@
61
61
  がNoneになってしまっています。
62
62
 
63
63
  これをNoneではなく、ゼロが返ってくるようにすればよいのではと思います。
64
+
65
+
66
+
67
+ ただしこれは応急対策であって、deficiencyおよび全容がどういう仕様なのか明らかにしていただかないと、正しい答えは導けないと思います。
68
+
69
+ (計算対象のうち、払っていない人(データ上不存在の人)に対しても、deficiencyを計算するのか。
70
+
71
+ たとえば上記でゼロを返した場合 deficiency_taro は残り二人のpayの平均値に-1をかけた数字になるが、これは仕様として正しいのか
72
+
73
+ そもそもデータが不存在の人があることを想定していないのか、等)