# Ü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/)