Neues Formular für das Anlegen neuer Gerichte erstellt.
This commit is contained in:
+27
-7
@@ -111,18 +111,38 @@ class GerichtCreateView(CreateView):
|
||||
objekt = self.object # Gibt uns das gerade gespeicherte Objekt zurück
|
||||
return reverse('speisekarte')
|
||||
|
||||
# 🔑 DIES ist die entscheidende Methode!
|
||||
def form_valid(self, form):
|
||||
"""
|
||||
Übersteuert die Standard-Logik:
|
||||
1. Speichert zuerst das Gericht (über super()).
|
||||
2. Leitet danach auf ein success/confirmation Pattern um.
|
||||
Wird ausgeführt, wenn das Formular erfolgreich validiert wurde.
|
||||
Wir speichern zuerst das Gericht (Parent) und dann alle Bilder (Children).
|
||||
"""
|
||||
super().form_valid() # Das eigentliche Speichern des Objekts
|
||||
# 1. Super-Call: Speichere das Hauptobjekt (das Gericht) ZUERST!
|
||||
# Dadurch wird der 'gericht_pk' generiert, den wir für die Kinder brauchen.
|
||||
gericht_instance = super().form_valid()
|
||||
|
||||
# Hier ist der Haken an Django: Die View wird beim Erfolg automatisch weitergeleitet.
|
||||
# Wir verwenden einen kleinen Trick, damit wir den Namen im Kontext haben.
|
||||
# Das gerade erstellte Gericht ist nun gespeichert und hat einen primären Key (PK).
|
||||
newly_created_dish = self.object
|
||||
|
||||
return redirect('success_nach_gerichterstellung') # Leiten auf eine temporäre URL um
|
||||
# 2. Bildverarbeitung: Gehe alle Dateien im POST-Request durch
|
||||
uploaded_files = self.request.FILES.getlist('bilder') # HIER das Feld 'bilder' verwenden!
|
||||
|
||||
if uploaded_files:
|
||||
print(f"DEBUG: Es wurden {len(uploaded_files)} Bilder verarbeitet.")
|
||||
for file in uploaded_files:
|
||||
# 3. Für jedes Bild erstellen wir ein neues GerichtBild-Objekt (Child)
|
||||
try:
|
||||
GerichtBild.objects.create(
|
||||
gericht=newly_created_dish, # Verknüpfung zum Parent
|
||||
image=file, # Das hochgeladene File-Objekt
|
||||
sort_order=0 # Standardmäßig in die Queue
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"WARNUNG beim Speichern des Bildes {file.name}: {e}")
|
||||
|
||||
|
||||
# 4. Die View wird automatisch weitergeleitet, dank super().form_valid()
|
||||
return redirect('speisekarte') # Name der URL nach Erfolg
|
||||
|
||||
# Optional: Setzen des initialen Datenzustands (z.B. Datum, falls relevant)
|
||||
def get_context_data(self, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user