Versuch Fehler nach Bestätigen des Formulars für das Anlegen eines neuen Gerichts
This commit is contained in:
+12
-17
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user