Aktualisierter Code #8
@@ -354,3 +354,105 @@ class GerichtBild(models.Model):
|
|||||||
|
|
||||||
# --- 2️⃣ Rufe die normale Django-Delete‑Logik auf ------------------------------------
|
# --- 2️⃣ Rufe die normale Django-Delete‑Logik auf ------------------------------------
|
||||||
super().delete(*args, **kwargs) # löscht den DB‑Eintrag
|
super().delete(*args, **kwargs) # löscht den DB‑Eintrag
|
||||||
|
# yourappname/admin.py
|
||||||
|
|
||||||
|
from django.contrib import admin
|
||||||
|
from .models import Kategorie, Gericht, Schulwoche, SpeiseplanTag, Menue, Bestellung, Bewertung, GerichtBild
|
||||||
|
|
||||||
|
# 1. Kategorien registrieren
|
||||||
|
@admin.register(Kategorie)
|
||||||
|
class KategorieAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('name',)
|
||||||
|
search_fields = ('name',)
|
||||||
|
|
||||||
|
# 2. Gerichte (Das wichtigste Modell für den Betreiber!)
|
||||||
|
@admin.register(Gericht)
|
||||||
|
class GerichtAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('name', 'kategorie', 'ist_vegetarisch', 'ist_dauerangebot')
|
||||||
|
list_filter = ['kategorie', 'is_vegetarisch', 'is_allergene_frei']
|
||||||
|
search_fields = ['name']
|
||||||
|
|
||||||
|
# 3. Bilder (Optional, aber hilfreich)
|
||||||
|
@admin.register(GerichtBild)
|
||||||
|
class GerichtBildAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('gericht', 'image')
|
||||||
|
list_filter = ['gericht']
|
||||||
|
# Hier können Sie eventuell das Bild beim Bearbeiten vorab anzeigen lassen
|
||||||
|
|
||||||
|
# 4. Speiseplan-Verwaltung (Schulwochen und Tage)
|
||||||
|
@admin.register(Schulwoche)
|
||||||
|
class SchulwocheAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('id', 'datum', 'ist_aktiv')
|
||||||
|
search_fields = ('id',)
|
||||||
|
|
||||||
|
# Hier könnten Sie weitere Modelle wie Menue, Bestellung usw. registrieren,
|
||||||
|
# je nachdem, welchen Zugriff der Betreiber auf diese Bereiche benötigt.
|
||||||
|
# yourappname/views.py
|
||||||
|
|
||||||
|
from django.shortcuts import render, redirect, get_object_or_404
|
||||||
|
from django.contrib.auth.decorators import login_required # Stellt sicher, dass nur eingeloggte Nutzer bestellen können
|
||||||
|
from .models import SpeiseplanTag, Menue, Bestellung, Person
|
||||||
|
from datetime import date
|
||||||
|
import django.db
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def place_order_view(request):
|
||||||
|
# 1. Überprüfen, ob Daten über POST (Formular) gesendet wurden
|
||||||
|
if request.method == 'POST':
|
||||||
|
# Wir nehmen an, dass das Formular Datum und Benutzer-ID sendet.
|
||||||
|
datum_str = request.POST.get('datum')
|
||||||
|
if not datum_str:
|
||||||
|
return render(request, 'order/error.html', {'message': "Bitte wählen Sie ein Datum."})
|
||||||
|
|
||||||
|
try:
|
||||||
|
bestellungsdatum = date.fromisoformat(datum_str) # Angenommen, das Format ist YYYY-MM-DD
|
||||||
|
except ValueError:
|
||||||
|
return render(request, 'order/error.html', {'message': "Ungültiges Datumsformat."})
|
||||||
|
|
||||||
|
# 2. Speiseplan für dieses Datum finden
|
||||||
|
try:
|
||||||
|
speisetag = SpeiseplanTag.objects.get(datum=bestellungsdatum)
|
||||||
|
except SpeiseplanTag.DoesNotExist:
|
||||||
|
return render(request, 'order/error.html', {'message': f"Für den {bestellungsdatum} ist kein Menü verfügbar."})
|
||||||
|
|
||||||
|
# 3. Das verfügbare Menü für diesen Tag ermitteln (Hier vereinfacht!)
|
||||||
|
try:
|
||||||
|
# Beispiel: Wir holen uns nur das erste gefundene Menü des Tages
|
||||||
|
menue_item = Menue.objects.filter(tag=speisetag).select_related('gericht').first()
|
||||||
|
|
||||||
|
if not menue_item:
|
||||||
|
return render(request, 'order/error.html', {'message': "Für dieses Datum ist kein Haupt-Menü konfiguriert."})
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
# Bei einem Fehler bei der Datenbankabfrage
|
||||||
|
return render(request, 'order/error.html', {'message': f"Fehler beim Laden des Menüs: {e}"})
|
||||||
|
|
||||||
|
|
||||||
|
# 4. Bestellung erstellen (Der Kernprozess)
|
||||||
|
user = Person.objects.get(pk=request.user.person_id) # Zugriff auf die Person-Details des eingeloggten Nutzers
|
||||||
|
|
||||||
|
try:
|
||||||
|
new_bestellung = Bestellung.objects.create(
|
||||||
|
person=user,
|
||||||
|
menue=menue_item, # Das Menü für den Tag
|
||||||
|
datum_bestellung=timezone.now(), # Zeitpunkt der Bestätigung
|
||||||
|
status='offen' # Standardmäßig offen
|
||||||
|
)
|
||||||
|
return redirect('order:confirmation_success') # Weiterleitung zu einer Erfolgsseite
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
# Fehlerbehandlung, z.B., wenn das Menü veraltet ist oder die Person fehlt
|
||||||
|
return render(request, 'order/error.html', {'message': f"Ein Bestellfehler ist aufgetreten: {e}"})
|
||||||
|
|
||||||
|
|
||||||
|
# 5. Fallback: Wenn Methode GET war (Anzeige des Formulars)
|
||||||
|
speisetag = SpeiseplanTag.objects.filter(datum__gte=date.today()).order_by('datum').first()
|
||||||
|
if not speisetag:
|
||||||
|
return render(request, 'order/form.html', {'error': "Kein zukünftiger Speiseplan gefunden."})
|
||||||
|
|
||||||
|
# Hier würden Sie ein Formular mit dem Datum und weiteren Optionen (z.B. Abholzeit) vorbelegen.
|
||||||
|
context = {
|
||||||
|
'speisetag': speisetag,
|
||||||
|
'menue_verfuegbar': True # ... etc.
|
||||||
|
}
|
||||||
|
return render(request, 'order/form.html', context)
|
||||||
Reference in New Issue
Block a user