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

回答編集履歴

2

追加

2021/01/30 05:55

投稿

退会済みユーザー
answer CHANGED
@@ -22,15 +22,42 @@
22
22
 
23
23
  したがって、データがない場合、Noneではなく、数が入るようにする必要があります。
24
24
 
25
- 対策として、たとえばTaroのデータが不存在のとき
25
+ 対策として、たとえばTaroのデータが不存在のとき、現状は
26
- 現状は
27
26
  money\money\views.py
28
27
  ```
29
28
  pay_taro = Money.objects.filter(name='Taro').aggregate(Sum('amount'))['amount__sum']
30
29
  ```
31
30
  がNoneになってしまっています。
32
- これをNoneではなく、ゼロが返ってくるようにすればよいのでと思います。
31
+ これをNoneではなく、ゼロが返ってくるようにすればエラーなくなります。
33
32
 
33
+ 例:total_amount及びpay_(個人名)に対して、`or 0`をつけて、agregateの計算結果がNoneの場合はゼロが代入されるようにする。
34
+ money\money\views.py
35
+ ```
36
+ (略)
37
+ #db aggregate
38
+ def get_context_data(self, **kwargs):
39
+ context = super().get_context_data(**kwargs)
40
+
41
+ #sum
42
+ total_amount = Money.objects.aggregate(Sum('amount'))['amount__sum'] or 0
43
+ context["total_amount"] = total_amount
44
+
45
+ #average
46
+ avg_amount = total_amount/3
47
+ context["avg_amount"] = avg_amount
48
+
49
+ #payment/per name=Taro
50
+ pay_taro = Money.objects.filter(name='Taro').aggregate(Sum('amount'))['amount__sum'] or 0
51
+ context["pay_taro"] = pay_taro
52
+
53
+ #payment/per name=Koki
54
+ pay_koki = Money.objects.filter(name='Koki').aggregate(Sum('amount'))['amount__sum'] or 0
55
+ context["pay_koki"] = pay_koki
56
+
57
+ #payment/per name=Kaze
58
+ pay_kaze = Money.objects.filter(name='Kaze').aggregate(Sum('amount'))['amount__sum'] or 0
59
+ context["pay_kaze"] = pay_kaze
60
+ ```
34
61
  ただしこれは応急対策であって、deficiencyおよび全容がどういう仕様なのか明らかにしていただかないと、正しい答えは導けないと思います。
35
62
  (計算対象のうち、払っていない人(データ上不存在の人)に対しても、deficiencyを計算するのか。
36
63
  たとえば上記でゼロを返した場合 deficiency_taro は残り二人のpayの平均値に-1をかけた数字になるが、これは仕様として正しいのか

1

追記

2021/01/30 05:55

投稿

退会済みユーザー
answer CHANGED
@@ -29,4 +29,9 @@
29
29
  pay_taro = Money.objects.filter(name='Taro').aggregate(Sum('amount'))['amount__sum']
30
30
  ```
31
31
  がNoneになってしまっています。
32
- これをNoneではなく、ゼロが返ってくるようにすればよいのではと思います。
32
+ これをNoneではなく、ゼロが返ってくるようにすればよいのではと思います。
33
+
34
+ ただしこれは応急対策であって、deficiencyおよび全容がどういう仕様なのか明らかにしていただかないと、正しい答えは導けないと思います。
35
+ (計算対象のうち、払っていない人(データ上不存在の人)に対しても、deficiencyを計算するのか。
36
+ たとえば上記でゼロを返した場合 deficiency_taro は残り二人のpayの平均値に-1をかけた数字になるが、これは仕様として正しいのか
37
+ そもそもデータが不存在の人があることを想定していないのか、等)