From 39700082e1a4937747ede2e18e73f82553e9cf05 Mon Sep 17 00:00:00 2001 From: Velichko Karakostov Date: Tue, 31 Aug 2021 14:36:24 +0300 Subject: [PATCH] Use aggregation for all_balance --- reValuate/home/views.py | 46 +++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/reValuate/home/views.py b/reValuate/home/views.py index 41556408..a885d830 100644 --- a/reValuate/home/views.py +++ b/reValuate/home/views.py @@ -5,18 +5,20 @@ from django.conf import settings from users.models import User import operator from upload.models import Media +from django.db.models import Sum + def homePage(request): iter_var = 0 - all_balance = [] + all_balance = 0 Cashier = False Processor = False - + balObject = Balance.objects.filter(user=request.user.id) userBalance = balObject.values("balanceValue") try: - userBalance = userBalance[0]['balanceValue'] + userBalance = userBalance[0]['balanceValue'] except IndexError: userBalance = None if request.user.groups.filter(name='Cashier').exists(): @@ -29,24 +31,24 @@ def homePage(request): userQR = f"Name = {request.user.username}, Date Joined = {request.user.date_joined.date()}, ID = {request.user.id}, isCashier={Cashier}, isProcessor={Processor}, Balance = {userBalance}" else: userQR=None - a = Balance.objects.all() - for user in a: - all_balance.append(user.balanceValue) - print(f"{all_balance}") - limited_coins = settings.ALL_COINS - sum(all_balance) + # Use aggregation that can be calculated in database (fast) + all_balance = Balance.objects.all().aggregate(s=Sum("balanceValue"))['s'] + # print(f"{all_balance}") + + limited_coins = settings.ALL_COINS - all_balance context = { "isCashier": Cashier, "isProcessor": Processor, "userQR":userQR, "fullbalance": limited_coins, - "currencyTotal": sum(all_balance), - "userBalance": userBalance + "currencyTotal": all_balance, + "userBalance": userBalance, } - + return render(request, "home.html", context) - + def leaderboard(request): users = User.objects.all() @@ -55,22 +57,22 @@ def leaderboard(request): try: username = i.username balance = i.balance.balanceValue - # add media counter and other stuff + # add media counter and other stuff if f"{username}" in leaderboard.keys(): leaderboard[username] = balance + leaderboard[username] else: - leaderboard[username] = balance + leaderboard[username] = balance except Exception as e: pass - + leaderboard = dict(sorted(leaderboard.items(), key=operator.itemgetter(0))) leaderboard = dict(reversed(list(leaderboard.items()))) while len(leaderboard) > 5: leaderboard.pop() - - media = Media.objects.all() + + media = Media.objects.all() user_media = {} for i in media: username = i.user.username @@ -78,7 +80,7 @@ def leaderboard(request): user_media[username] += 1 else: user_media[username] = 1 - + user_media = dict(sorted(user_media.items(), key=operator.itemgetter(0))) user_media = dict(reversed(list(user_media.items()))) print(user_media) @@ -92,7 +94,7 @@ def leaderboard(request): else: user_data = {i:{"Images":len(iter_user_media.filter(is_video=False))}} print(user_data) - + while len(user_media) > 5: user_media.pop() @@ -103,8 +105,8 @@ def leaderboard(request): # if f"{username}" in media_count.values(): # media_count[username] = image + media_count[username].value # else: - # media_count[username] = image - + # media_count[username] = image + # print(media_count) context = { @@ -113,4 +115,4 @@ def leaderboard(request): } return render(request, 'leaderboard.html', context) - +