Versuch Fehler nach Bestätigen des Formulars für das Anlegen eines neuen Gerichts

This commit is contained in:
2026-06-26 09:58:21 +02:00
parent f42ca76066
commit 1b1e6c1553
+12 -17
View File
@@ -111,38 +111,33 @@ class GerichtCreateView(CreateView):
objekt = self.object # Gibt uns das gerade gespeicherte Objekt zurück objekt = self.object # Gibt uns das gerade gespeicherte Objekt zurück
return reverse('speisekarte') return reverse('speisekarte')
# 🔑 DIES ist die entscheidende Methode!
def form_valid(self, form): def form_valid(self, form):
""" """
Wird ausgeführt, wenn das Formular erfolgreich validiert wurde. Der magische Hook: Wird ausgeführt, wenn das Formular erfolgreich validiert wurde.
Wir speichern zuerst das Gericht (Parent) und dann alle Bilder (Children). Wir speichern ZUERST das Hauptobjekt (Gericht) und DANN die Kinder (Bilder).
""" """
# 1. Super-Call: Speichere das Hauptobjekt (das Gericht) ZUERST!
# Dadurch wird der 'gericht_pk' generiert, den wir für die Kinder brauchen. # 1. !!! HIER IST DIE KORREKTUR !!!
# Das super().form_valid() MUSS der ALLERERSTE Befehl sein, damit Django weiß,
# dass es das Hauptobjekt speichert und den Key zurückgibt!
gericht_instance = super().form_valid() gericht_instance = super().form_valid()
newly_created_dish = self.object # Self.object enthält jetzt das gerettete Gericht-Objekt
# Das gerade erstellte Gericht ist nun gespeichert und hat einen primären Key (PK). # 2. Bildverarbeitung (Nur ausführen, wenn Dateien hochgeladen wurden)
newly_created_dish = self.object uploaded_files = self.request.FILES.getlist('bilder')
# 2. Bildverarbeitung: Gehe alle Dateien im POST-Request durch
uploaded_files = self.request.FILES.getlist('bilder') # HIER das Feld 'bilder' verwenden!
if uploaded_files: if uploaded_files:
print(f"DEBUG: Es wurden {len(uploaded_files)} Bilder verarbeitet.")
for file in uploaded_files: for file in uploaded_files:
# 3. Für jedes Bild erstellen wir ein neues GerichtBild-Objekt (Child)
try: try:
GerichtBild.objects.create( GerichtBild.objects.create(
gericht=newly_created_dish, # Verknüpfung zum Parent gericht=newly_created_dish, # Verknüpfung zum Parent (neue Instance)
image=file, # Das hochgeladene File-Objekt image=file, # Das hochgeladene File-Objekt
sort_order=0 # Standardmäßig in die Queue sort_order=0
) )
except Exception as e: except Exception as e:
print(f"WARNUNG beim Speichern des Bildes {file.name}: {e}") print(f"WARNUNG beim Speichern des Bildes {file.name}: {e}")
return super().form_valid() # Das Ergebnis muss immer zurückgegeben werden!
# 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) # Optional: Setzen des initialen Datenzustands (z.B. Datum, falls relevant)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):