mensa_app/models.py aktualisiert
Ich habe einen Code hinzugefügt, der bewirkt, dass die Schüler bestellen können und ein Admin (der Mensabetreiber) bei Anmeldung auf die Bearbeitung der Gerichte zugreifen kann.
This commit is contained in:
@@ -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