Use aggregation for all_balance

This commit is contained in:
Velichko Karakostov 2021-08-31 14:36:24 +03:00
parent 53c35377c6
commit 39700082e1
No known key found for this signature in database
GPG Key ID: D4463EC61D69232E

View File

@ -5,18 +5,20 @@ from django.conf import settings
from users.models import User from users.models import User
import operator import operator
from upload.models import Media from upload.models import Media
from django.db.models import Sum
def homePage(request): def homePage(request):
iter_var = 0 iter_var = 0
all_balance = [] all_balance = 0
Cashier = False Cashier = False
Processor = False Processor = False
balObject = Balance.objects.filter(user=request.user.id) balObject = Balance.objects.filter(user=request.user.id)
userBalance = balObject.values("balanceValue") userBalance = balObject.values("balanceValue")
try: try:
userBalance = userBalance[0]['balanceValue'] userBalance = userBalance[0]['balanceValue']
except IndexError: except IndexError:
userBalance = None userBalance = None
if request.user.groups.filter(name='Cashier').exists(): 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}" userQR = f"Name = {request.user.username}, Date Joined = {request.user.date_joined.date()}, ID = {request.user.id}, isCashier={Cashier}, isProcessor={Processor}, Balance = {userBalance}"
else: else:
userQR=None userQR=None
a = Balance.objects.all()
for user in a: # Use aggregation that can be calculated in database (fast)
all_balance.append(user.balanceValue) all_balance = Balance.objects.all().aggregate(s=Sum("balanceValue"))['s']
print(f"{all_balance}") # print(f"{all_balance}")
limited_coins = settings.ALL_COINS - sum(all_balance)
limited_coins = settings.ALL_COINS - all_balance
context = { context = {
"isCashier": Cashier, "isCashier": Cashier,
"isProcessor": Processor, "isProcessor": Processor,
"userQR":userQR, "userQR":userQR,
"fullbalance": limited_coins, "fullbalance": limited_coins,
"currencyTotal": sum(all_balance), "currencyTotal": all_balance,
"userBalance": userBalance "userBalance": userBalance,
} }
return render(request, "home.html", context) return render(request, "home.html", context)
def leaderboard(request): def leaderboard(request):
users = User.objects.all() users = User.objects.all()
@ -55,22 +57,22 @@ def leaderboard(request):
try: try:
username = i.username username = i.username
balance = i.balance.balanceValue balance = i.balance.balanceValue
# add media counter and other stuff # add media counter and other stuff
if f"{username}" in leaderboard.keys(): if f"{username}" in leaderboard.keys():
leaderboard[username] = balance + leaderboard[username] leaderboard[username] = balance + leaderboard[username]
else: else:
leaderboard[username] = balance leaderboard[username] = balance
except Exception as e: except Exception as e:
pass pass
leaderboard = dict(sorted(leaderboard.items(), key=operator.itemgetter(0))) leaderboard = dict(sorted(leaderboard.items(), key=operator.itemgetter(0)))
leaderboard = dict(reversed(list(leaderboard.items()))) leaderboard = dict(reversed(list(leaderboard.items())))
while len(leaderboard) > 5: while len(leaderboard) > 5:
leaderboard.pop() leaderboard.pop()
media = Media.objects.all()
media = Media.objects.all()
user_media = {} user_media = {}
for i in media: for i in media:
username = i.user.username username = i.user.username
@ -78,7 +80,7 @@ def leaderboard(request):
user_media[username] += 1 user_media[username] += 1
else: else:
user_media[username] = 1 user_media[username] = 1
user_media = dict(sorted(user_media.items(), key=operator.itemgetter(0))) user_media = dict(sorted(user_media.items(), key=operator.itemgetter(0)))
user_media = dict(reversed(list(user_media.items()))) user_media = dict(reversed(list(user_media.items())))
print(user_media) print(user_media)
@ -92,7 +94,7 @@ def leaderboard(request):
else: else:
user_data = {i:{"Images":len(iter_user_media.filter(is_video=False))}} user_data = {i:{"Images":len(iter_user_media.filter(is_video=False))}}
print(user_data) print(user_data)
while len(user_media) > 5: while len(user_media) > 5:
user_media.pop() user_media.pop()
@ -103,8 +105,8 @@ def leaderboard(request):
# if f"{username}" in media_count.values(): # if f"{username}" in media_count.values():
# media_count[username] = image + media_count[username].value # media_count[username] = image + media_count[username].value
# else: # else:
# media_count[username] = image # media_count[username] = image
# print(media_count) # print(media_count)
context = { context = {
@ -113,4 +115,4 @@ def leaderboard(request):
} }
return render(request, 'leaderboard.html', context) return render(request, 'leaderboard.html', context)