From 1b1e6c1553dc127e6204164ab7bf3970752e1a9c Mon Sep 17 00:00:00 2001 From: Martin Putzlocher Date: Fri, 26 Jun 2026 09:58:21 +0200 Subject: [PATCH] =?UTF-8?q?Versuch=20Fehler=20nach=20Best=C3=A4tigen=20des?= =?UTF-8?q?=20Formulars=20f=C3=BCr=20das=20Anlegen=20eines=20neuen=20Geric?= =?UTF-8?q?hts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mensa_app/views.py | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/mensa_app/views.py b/mensa_app/views.py index e852d41..0aba06a 100644 --- a/mensa_app/views.py +++ b/mensa_app/views.py @@ -111,38 +111,33 @@ 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): """ - Wird ausgeführt, wenn das Formular erfolgreich validiert wurde. - Wir speichern zuerst das Gericht (Parent) und dann alle Bilder (Children). + Der magische Hook: Wird ausgeführt, wenn das Formular erfolgreich validiert wurde. + 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() + 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). - newly_created_dish = self.object - - # 2. Bildverarbeitung: Gehe alle Dateien im POST-Request durch - uploaded_files = self.request.FILES.getlist('bilder') # HIER das Feld 'bilder' verwenden! + # 2. Bildverarbeitung (Nur ausführen, wenn Dateien hochgeladen wurden) + uploaded_files = self.request.FILES.getlist('bilder') 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 + gericht=newly_created_dish, # Verknüpfung zum Parent (neue Instance) image=file, # Das hochgeladene File-Objekt - sort_order=0 # Standardmäßig in die Queue + sort_order=0 ) 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 + return super().form_valid() # Das Ergebnis muss immer zurückgegeben werden! # Optional: Setzen des initialen Datenzustands (z.B. Datum, falls relevant) def get_context_data(self, **kwargs):