Aktualisierter Code #8
@@ -354,3 +354,105 @@ class GerichtBild(models.Model):
|
||||
|
||||
# --- 2️⃣ Rufe die normale Django-Delete‑Logik auf ------------------------------------
|
||||
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