---
# System prepended metadata

title: 'Übungsaufgabe: Django Admin – Buchungssystem für Veranstaltungen'

---

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