diff --git a/agagd/agagd_core/tables/beta.py b/agagd/agagd_core/tables/beta.py index 78944483..2237a831 100644 --- a/agagd/agagd_core/tables/beta.py +++ b/agagd/agagd_core/tables/beta.py @@ -3,6 +3,9 @@ # DJango Imports import django_tables2 as tables + +# AGAGD Column Imports +from agagd_core.tables.core import ChapterColumn from django.core.exceptions import ObjectDoesNotExist from django.urls import reverse from django.utils.safestring import mark_safe @@ -180,6 +183,35 @@ class Meta: template_name = "django_tables2/bootstrap4.html" +class SearchResultsTable(tables.Table): + member_id = tables.LinkColumn( + "member_detail", kwargs={"member_id": tables.A("member_id")} + ) + chapter_id = ChapterColumn(verbose_name="Chapter") + players__rating = tables.Column(verbose_name="Rating") + country = tables.LinkColumn( + "country_detail", kwargs={"country_name": tables.A("country")} + ) + full_name = tables.LinkColumn( + "member_detail", kwargs={"member_id": tables.A("member_id")} + ) + + class Meta: + model = agagd_models.Member + fields = ("full_name", "state", "players__rating", "renewal_due", "country") + sequence = ( + "full_name", + "players__rating", + "chapter_id", + "country", + "state", + "renewal_due", + "member_id", + ) + attrs = default_bootstrap_header_column_attrs + template_name = "django_tables2/bootstrap4.html" + + class Top10DanTable(tables.Table): pin_player = tables.Column( orderable=False, diff --git a/agagd/agagd_core/views/beta/search.py b/agagd/agagd_core/views/beta/search.py index 2c119052..9ff03247 100644 --- a/agagd/agagd_core/views/beta/search.py +++ b/agagd/agagd_core/views/beta/search.py @@ -1,26 +1,52 @@ +from agagd_core.models import Member +from agagd_core.tables.beta import SearchResultsTable +from django.db.models import F, Q from django.http import HttpResponseRedirect -from django.shortcuts import render +from django.template.response import TemplateResponse from django.urls import reverse -from django.views.generic import TemplateView +from django.views.generic import DetailView +from django_tables2 import RequestConfig -class SearchView(TemplateView): +class SearchView(DetailView): template_name = "beta.search_page.html" + search_results_template_name = "beta.search_results.html" def get(self, request): query = request.GET.get("q", "") if not query: - return render(request, self.template_name) + return TemplateResponse(request, self.template_name) if query.isdigit(): member_id = [int(query)] return HttpResponseRedirect(reverse("member_detail", args=member_id)) - return HttpResponseRedirect(f"/search/?q={query}") - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["page_title"] = "Search -- Players | Games | Tournaments" - - return context + member_table_data = ( + Member.objects.filter(Q(member_id=F("players__pin_player"))) + .filter(full_name__icontains=query) + .values( + "member_id", + "chapter_id", + "renewal_due", + "state", + "players__rating", + "country", + "full_name", + "family_name", + ) + .order_by("family_name") + ) + + self.template_name = self.search_results_template_name + + member_results_table = SearchResultsTable(member_table_data) + RequestConfig(request, paginate={"per_page": 25}).configure( + member_results_table + ) + + context = locals() + context["search_query"] = query + context["member_results_table"] = member_results_table + + return TemplateResponse(request, self.template_name, context) diff --git a/agagd/jinja2/beta.search_results.html b/agagd/jinja2/beta.search_results.html new file mode 100644 index 00000000..75cde71e --- /dev/null +++ b/agagd/jinja2/beta.search_results.html @@ -0,0 +1,17 @@ +{% extends "beta.base.html" %} + +{% block content %} + +
+
+
+

Search Results for {{ search_query }}

+
+
+
+
+ {{ member_results_table.as_html(request) }} +
+
+
+{% endblock %}