# Übungsaufgabe: Django Admin – Buchungssystem für Veranstaltungen ## Ziel In dieser Übung konzentrieren wir uns darauf, das Django Admin Panel für ein Veranstaltung-Buchungssystem zu verstehen und anzupassen. Wir werden uns auf die Registrierung von Modellen im Admin, das Hinzufügen von Filterfunktionen, die Anordnung von Feldern und weitere Admin-Anpassungen konzentrieren. Am Ende solltest du in der Lage sein, das Django Admin Panel effektiv zu nutzen, um eine benutzerfreundliche Oberfläche für die Verwaltung deiner Veranstaltungen und Buchungen zu schaffen. --- ## Aufgaben ### 1. Überblick verschaffen **Aufgabe:** - Clone und öffne das Projekt und verschaffe dir einen Überblick über die Models. Stelle sicher, dass alle Apps richtig installiert und migriert sind, nachdem du deine venv eingerichtet hast -> [Django Projekt Clonen](https://hackmd.io/@mtUtNKDMTzWHLKW5U9RnOw/HkKF0C6Rlx) - Erstelle einen Superuser, um ins Admin Panel zu gelangen: ```bash python manage.py createsuperuser ``` - Starte den Server und gehe auf [http://127.0.0.1:8000/admin/](http://127.0.0.1:8000/admin/) und melde dich mit dem Superuser-Konto an. --- ### 2. Registrierung der Modelle im Admin Panel **Aufgabe:** - Öffne die Datei `events_app/admin.py` und registriere die Modelle `EventCategory`, `Location` und `Event`. - Mache das gleiche in der `bookings_app`. > Hinweis: Die Registrierung der Modelle ist notwendig, um sie im Admin Panel sichtbar zu machen, denke auch an die migrations. Weiter anpassen werden wir es gleich. > [Django Doku zum Admin Interface](https://docs.djangoproject.com/en/5.1/ref/contrib/admin/) --- ### 3. Erste Anpassungen im Admin Panel **Aufgabe:** - Stelle sicher, dass in der Event-Admin-Übersicht die folgenden Felder angezeigt werden: - `title` - `category` - `location` - `date` - Das Feld `capacity` soll **nicht** angezeigt werden nutze `list_display`. > Hinweis: Erstelle dir hier selber ein Paar Testdaten über das Admin Interface. --- ### 4. Hinzufügen von Such- und Filterfunktionen im Admin **Aufgabe:** - Füge eine Suchfunktion hinzu, mit der man nach `title` und `date` von Veranstaltungen suchen kann. - Füge einen Filter nach `category` hinzu, damit Veranstaltungen nach ihrer Kategorie gefiltert werden können. > Hinweis: Verwende die Eigenschaften `search_fields` und `list_filter` in der Admin-Klasse, suche danach ggf. in der Doku. --- ### 5. Layout mit `fieldsets` anpassen **Aufgabe:** - Verwende `fieldsets`, um das Formular für das Modell `Event` im Admin Panel in zwei Abschnitte zu unterteilen: - **Allgemein**: `title`, `category`, `date` - **Organisation**: `location`, `capacity` > Achte darauf, dass das Layout übersichtlich und benutzerfreundlich bleibt, heißt, die eingeklappten Felder sind nicht required. --- ### 6. `date_hierarchy` hinzufügen **Aufgabe:** - Füge das `date_hierarchy`-Attribut in der Admin-Klasse von `Event` hinzu, damit du Veranstaltungen nach Datum gruppiert anzeigen kannst. --- ### 7. Filterung von Buchungen im Admin Panel **Aufgabe:** - Füge im `BookingAdmin` ein Filter hinzu, um nur die bestätigten Buchungen (`confirmed=True`) anzuzeigen. - Nutze das `list_filter`-Attribut und filtere nach dem Feld `confirmed`. --- ### 8. Umbenennung von Modellen und Feldern **Aufgabe:** - Benenne das Modell `Event` in der Admin-Ansicht um. Nutze dafür das `verbose_name`-Attribut und ändere den Namen in **Liveact**. - Sortiere die Modelle im Admin mit der Option `ordering` nach dem Feld `date`. --- ### 9. Felder im Admin nur als read-only anzeigen **Aufgabe:** - Ändere das Modell `Booking`, sodass das Feld `booking_date` im Admin Panel **nur lesbar** ist. - Hinweis: Verwende das Attribut `readonly_fields`, um ein Feld im Admin Panel als nur lesbar anzuzeigen. --- ### 10. Prepopulierte Felder **Aufgabe:** - Füge für das Admin Modell `Participant` ein prepopuliertes Feld hinzu: - Erstelle dafür zuerst im `Participant` Model ein Feld `full_name` mit blank=True. - `full_name` soll im Admin Panel angezeigt werden und automatisch `first_name` und `last_name` bei neuer Eingabe zusammenführen. - [Prepopulated Fields Doku](https://docs.djangoproject.com/en/5.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields) --- ### 11. Hilfe-Texte im Admin Panel **Aufgabe:** - Füge für das Modell `Participant` Hilfetexte für die Felder `first_name`, `last_name` und `email` hinzu. - [Django Forms: help_text](https://docs.djangoproject.com/en/5.1/ref/forms/fields/)