feat: added text search for title and description

This commit is contained in:
2025-05-19 21:08:11 +02:00
parent 8df466c61f
commit 6306ffd432
2 changed files with 24 additions and 3 deletions

View File

@@ -59,6 +59,18 @@
<option value="closed" {% if selected_status == "closed" %}selected{% endif %}>Erledigt</option> <option value="closed" {% if selected_status == "closed" %}selected{% endif %}>Erledigt</option>
</select> </select>
</form> </form>
<form method="get" style="margin-bottom: 1.5rem;">
<input type="text" name="q" placeholder="🔍 Suche nach Titel oder Beschreibung"
value="{{ search_query }}" style="padding: 0.4rem; width: 60%; max-width: 300px;">
{% if selected_status %}
<input type="hidden" name="status" value="{{ selected_status }}">
{% endif %}
<button type="submit">Suchen</button>
</form>
{% if search_query %}
<p>Ergebnisse für „<strong>{{ search_query }}</strong>“:</p>
{% endif %}
{% for ticket in tickets %} {% for ticket in tickets %}
<div class="ticket-item"> <div class="ticket-item">

View File

@@ -8,6 +8,7 @@ from django.urls import reverse
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib import messages from django.contrib import messages
from django.shortcuts import redirect from django.shortcuts import redirect
from django.db.models import Q
from .models import Ticket, TicketHistory from .models import Ticket, TicketHistory
@@ -16,24 +17,32 @@ class HomeView(TemplateView):
template_name = "ticketsystem/home.html" template_name = "ticketsystem/home.html"
class TicketListView(LoginRequiredMixin, ListView): class TicketListView(ListView):
model = Ticket model = Ticket
template_name = "ticketsystem/index.html" template_name = "ticketsystem/index.html"
context_object_name = "tickets" context_object_name = "tickets"
ordering = ["-created_at"] # neueste zuerst ordering = ["-created_at"]
paginate_by = 10 # optional: Pagination (10 Tickets pro Seite) paginate_by = 10
def get_queryset(self): def get_queryset(self):
queryset = super().get_queryset() queryset = super().get_queryset()
status = self.request.GET.get("status") status = self.request.GET.get("status")
query = self.request.GET.get("q")
if status: if status:
queryset = queryset.filter(status=status) queryset = queryset.filter(status=status)
if query:
queryset = queryset.filter(
Q(title__icontains=query) | Q(description__icontains=query)
)
return queryset return queryset
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["selected_status"] = self.request.GET.get("status", "") context["selected_status"] = self.request.GET.get("status", "")
context["search_query"] = self.request.GET.get("q", "")
return context return context