Files
korrekturmanagementsystem/ticketsystem/views.py

82 lines
2.9 KiB
Python

from django.shortcuts import get_object_or_404, render
from django.views.generic import ListView, TemplateView
from django.views.generic.edit import CreateView, UpdateView
from django.urls import reverse_lazy
from django.views.generic.detail import DetailView
from django.views.generic.edit import FormMixin
from .forms import CommentForm
from django.urls import reverse
from .models import Ticket
class HomeView(TemplateView):
template_name = "ticketsystem/home.html"
class TicketListView(ListView):
model = Ticket
template_name = "ticketsystem/index.html"
context_object_name = "tickets"
ordering = ["-created_at"] # neueste zuerst
paginate_by = 10 # optional: Pagination (10 Tickets pro Seite)
def get_queryset(self):
queryset = super().get_queryset()
status = self.request.GET.get("status")
if status:
queryset = queryset.filter(status=status)
return queryset
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["selected_status"] = self.request.GET.get("status", "")
return context
class TicketDetailView(FormMixin, DetailView):
model = Ticket # <- das ist wichtig!
template_name = "ticketsystem/detail.html"
context_object_name = "ticket"
form_class = CommentForm
def get_success_url(self):
return reverse("detail", kwargs={"pk": self.object.pk})
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
comment = form.save(commit=False)
comment.ticket = self.object
comment.author = request.user
comment.save()
return super().form_valid(form)
return self.form_invalid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form"] = self.get_form()
return context
class TicketCreateView(CreateView):
model = Ticket
fields = ["title", "description", "priority", "assigned_to"] # user & status setzen wir automatisch
template_name = "ticketsystem/ticket_form.html"
success_url = reverse_lazy("index")
def form_valid(self, form):
form.instance.created_by = self.request.user # Der angemeldete User wird automatisch gesetzt
form.instance.status = "open" # Neues Ticket beginnt immer als "offen"
return super().form_valid(form)
class TicketUpdateView(UpdateView):
model = Ticket
fields = ["title", "description", "status", "priority", "assigned_to"]
template_name = "ticketsystem/ticket_form.html" # kannst das gleiche Template wie beim Erstellen verwenden
success_url = reverse_lazy("index") # oder zurück zur Detailseite
def get_queryset(self):
return Ticket.objects.all() # Optional: Nur eigene Tickets bearbeiten lassen?