前提・実現したいこと
テストコードを実行した際に発生したエラーを解決したいです。
ランサーバーを起動すると正常に動くのですが、テストコードを実行するとエラーが発生します。
初歩的な質問かもしれませんが、解決策をご教授していただけないでしょうか。
発生している問題・エラーメッセージ
型を合わせて計算する方法がわかりません。
データベースの集計した値を avg_amount = Money.objects.aggregate(Sum('amount'))['amount__sum']/3 と代入したのですが、TypeError: unsupported operand type(s) for /: 'NoneType' and 'int' とエラーが出ました。
File "/Users/taro/pj/env/moneypj/money/views.py", line 31, in get_context_data avg_amount = Money.objects.aggregate(Sum('amount'))['amount__sum']/3 TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'
試したこと
型が違うとのことだったため、以下のコードを実行しましたが、解決できませんでした。
avg_amount = int(Money.objects.aggregate(Sum('amount'))['amount__sum'])/3
補足情報(FW/ツールのバージョンなど)
python 3.9.1
django 3.1.5
###追記
画像を用いて質問したかったので、もう一度投稿させていただきます。
金額を入力して割り勘金額を動的に表示するプログラムを実装中です。
画像の赤線部分が今回解決したいエラー箇所です。
該当のソースコード(views.py)
class MoneyListView(ListView): model = Money context_object_name = 'money_list' paginate_by = 3 #db aggregate def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) #sum total_amount = Money.objects.aggregate(Sum('amount'))['amount__sum'] context["total_amount"] = total_amount #average avg_amount = Money.objects.aggregate(Sum('amount'))['amount__sum']/3 context["avg_amount"] = avg_amount #payment/per name=Taro pay_taro = Money.objects.filter(name='Taro').aggregate(Sum('amount'))['amount__sum'] context["pay_taro"] = pay_taro #payment/per name=Koki pay_koki = Money.objects.filter(name='Koki').aggregate(Sum('amount'))['amount__sum'] context["pay_koki"] = pay_koki #payment/per name=Kaze pay_kaze = Money.objects.filter(name='Kaze').aggregate(Sum('amount'))['amount__sum'] context["pay_kaze"] = pay_kaze #deficiency/per name=Taro deficiency_taro = avg_amount - pay_taro context["deficiency_taro"] = deficiency_taro #deficiency/per name=Koki deficiency_koki = avg_amount - pay_koki context["deficiency_koki"] = deficiency_koki #deficiency/per name=Kaze deficiency_kaze = avg_amount - pay_kaze context["deficiency_kaze"] = deficiency_kaze #create graph x_list = ['Taro', 'Koki', 'Kaze'] y_list = [pay_taro, pay_koki, pay_kaze] create_graph(x_list, y_list) graph = get_image() context['graph'] = graph return context
該当のソースコード(htmlファイル)
{% extends 'base.html' %} {% block body %} <div class="container"> <p><a href="{% url 'create' %}" class="btn btn-secondary">追加</a></p> {% for money in object_list %} <div class="alert alert-secondary" role="alert"> <p>{{ money.purpose }}</p> <p> {{ money.name }} : {{ money.amount }}円 </p> <a href="{% url 'detail' money.pk %}" class="btn btn-secondary btn-sm" tabindex="-1" role="button" aria-disabled="true">詳細</a> <a href="{% url 'update' money.pk %}" class="btn btn-secondary btn-sm" tabindex="-1" role="button" aria-disabled="true">編集</a> <a href="{% url 'delete' money.pk %}" class="btn btn-secondary btn-sm" tabindex="-1" role="button" aria-disabled="true">削除</a> </div> {% endfor %} <div class="alert alert-primary" role="alert"> <h6>総合計金額</h6> <p>{{ total_amount }}円</p> <h6>割り勘金額</h6> <p>{{ avg_amount|floatformat:1 }}円</p> <h6>現在の支払金額</h6> <p>Taro:{{ pay_taro }}円<br> Koki:{{ pay_koki }}円<br> Kaze:{{ pay_kaze }}円</p> <h6>支払い不足金額</h6> <p>Taro:{{ deficiency_taro|floatformat:1 }}円<br> Koki:{{ deficiency_koki|floatformat:1 }}円<br> Kaze:{{ deficiency_kaze|floatformat:1 }}円</p> <p> ***<br> 〜支払い不足金額について〜<br> +n円:n円払ってもらい過ぎ<br> -n円:n円払い過ぎ<br> *** </p> </div> <img src="data:image/png;base64, {{ graph | safe }} " alt=""> <nav aria-label="Page navigation example"> <ul class="pagination"> {% if page_obj.has_previous %} <li class="page-item"> <a class="page-link" href="?page={{ page_obj.previous_page_number }}" aria-label="Previous"> <span aria-hidden="true">«</span> <span class="sr-only">Previous</span> </a> </li> {% endif %} {% for page in paginator.page_range %} <li {% if page == page_obj.number %} class="page-item active" {% endif %}><a class="page-link" href="?page={{ page }}">{{ page }}</a></li> {% endfor %} {% if page_obj.has_next %} <li class="page-item"> <a class="page-link" href="?page={{ page_obj.next_page_number }}" aria-label="Next"> <span aria-hidden="true">»</span> <span class="sr-only">Next</span> </a> </li> {% endif %} </ul> </nav> </div> {% endblock %}