Implement search select component
Django CI/CD / test (push) Successful in 40s
Django CI/CD / build-and-push (push) Successful in 1m24s

This commit is contained in:
2026-06-06 22:52:26 +02:00
parent 3ce3356064
commit afc16aabbb
16 changed files with 1152 additions and 97 deletions
+8 -4
View File
@@ -10,6 +10,7 @@ from django.db.models import (
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.timezone import localtime
from django.utils.timezone import now as timezone_now
from common.layout import render_page
@@ -21,11 +22,14 @@ from games.views.stats_data import compute_stats
def model_counts(request: HttpRequest) -> dict[str, bool]:
now = timezone_now()
this_day, this_month, this_year = now.day, now.month, now.year
# Use a contiguous [midnight, next midnight) range in the active timezone
# instead of day/month/year extracts: a range filter can use an index on
# timestamp_start, whereas the extracts force a per-row datetime function.
start_of_today = localtime(now).replace(hour=0, minute=0, second=0, microsecond=0)
start_of_tomorrow = start_of_today + timedelta(days=1)
today_played = Session.objects.filter(
timestamp_start__day=this_day,
timestamp_start__month=this_month,
timestamp_start__year=this_year,
timestamp_start__gte=start_of_today,
timestamp_start__lt=start_of_tomorrow,
).aggregate(time=Sum(F("duration_total")))["time"]
last_7_played = Session.objects.filter(
timestamp_start__gte=(now - timedelta(days=7))
+9 -3
View File
@@ -203,7 +203,9 @@ def add_purchase(request: HttpRequest, game_id: int = 0) -> HttpResponse:
request,
AddForm(form, request=request, additional_row=_purchase_additional_row()),
title="Add New Purchase",
scripts=ModuleScript("add_purchase.js"),
scripts=mark_safe(
ModuleScript("search_select.js") + ModuleScript("add_purchase.js")
),
)
@@ -219,7 +221,9 @@ def edit_purchase(request: HttpRequest, purchase_id: int) -> HttpResponse:
request,
AddForm(form, request=request, additional_row=_purchase_additional_row()),
title="Edit Purchase",
scripts=ModuleScript("add_purchase.js"),
scripts=mark_safe(
ModuleScript("search_select.js") + ModuleScript("add_purchase.js")
),
)
@@ -401,8 +405,10 @@ def finish_purchase(request: HttpRequest, purchase_id: int) -> HttpResponse:
def related_purchase_by_game(request: HttpRequest) -> HttpResponse:
games: list[str] = request.GET.getlist("games")
if games:
from games.forms import related_purchase_queryset
form = PurchaseForm()
qs = Purchase.objects.filter(games__in=games, type=Purchase.GAME).order_by(
qs = related_purchase_queryset().filter(games__in=games).order_by(
"games__sort_name"
)
+6 -2
View File
@@ -270,7 +270,9 @@ def add_session(request: HttpRequest, game_id: int = 0) -> HttpResponse:
request,
AddForm(form, request=request, fields=_session_fields(form), submit_class=""),
title="Add New Session",
scripts=ModuleScript("add_session.js"),
scripts=mark_safe(
ModuleScript("search_select.js") + ModuleScript("add_session.js")
),
)
@@ -285,7 +287,9 @@ def edit_session(request: HttpRequest, session_id: int) -> HttpResponse:
request,
AddForm(form, request=request, fields=_session_fields(form), submit_class=""),
title="Edit Session",
scripts=ModuleScript("add_session.js"),
scripts=mark_safe(
ModuleScript("search_select.js") + ModuleScript("add_session.js")
),
)