Neues Gericht anlegen funktioniert!

This commit is contained in:
2026-06-26 11:01:12 +02:00
parent 1b1e6c1553
commit e0bd01fa88
3 changed files with 44 additions and 14 deletions
BIN
View File
Binary file not shown.
@@ -0,0 +1,29 @@
# Generated by Django 5.2.14 on 2026-06-26 08:55
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('mensa_app', '0011_alter_person_options_alter_gericht_time_creation_and_more'),
]
operations = [
migrations.AddField(
model_name='gericht',
name='beschreibung',
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name='gericht',
name='time_creation',
field=models.TimeField(default=datetime.datetime(2026, 6, 26, 8, 55, 13, 383962)),
),
migrations.AlterField(
model_name='gericht',
name='time_last_change',
field=models.TimeField(default=datetime.datetime(2026, 6, 26, 8, 55, 13, 383962)),
),
]
+15 -14
View File
@@ -5,7 +5,7 @@ from django.utils import timezone
from datetime import datetime
from django.views.generic import ListView, TemplateView
from django.views.generic.edit import CreateView
from django.shortcuts import redirect # Importiere die Redirect-Funktion
from django.shortcuts import redirect, reverse # Importiere die Redirect-Funktion
from .forms import GerichtForm # Importiere dein neues Formular
from .models import Gericht, Menue, SpeiseplanTag, Bestellung
@@ -113,31 +113,32 @@ class GerichtCreateView(CreateView):
def form_valid(self, form):
"""
Der magische Hook: Wird ausgeführt, wenn das Formular erfolgreich validiert wurde.
Wir speichern ZUERST das Hauptobjekt (Gericht) und DANN die Kinder (Bilder).
Die korrigierte Version der Form-Validierung.
Das 'form' Argument wird hier explizit als zweites Argument deklariert, um den TypeError zu verhindern.
"""
# 1.!!! WICHTIG: Das Aufrufen von super().form_valid() MUSS der allererste Befehl sein!
# Django speichert damit das Hauptobjekt (das Gericht) und übergibt es als self.object
super().form_valid(form)
# 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
# Jetzt sind wir sicher, dass das Objekt gespeichert wurde und Zugriff auf das neu erstellte Objekt haben:
newly_created_dish = self.object
# 2. Bildverarbeitung (Nur ausführen, wenn Dateien hochgeladen wurden)
uploaded_files = self.request.FILES.getlist('bilder')
# 2. Bilder verarbeiten (Der kritische Schritt nach der Speicherung)
uploaded_files = self.request.FILES.getlist('bilder') # Achtung: self.request wird hier genutzt!
if uploaded_files:
for file in uploaded_files:
try:
GerichtBild.objects.create(
gericht=newly_created_dish, # Verknüpfung zum Parent (neue Instance)
image=file, # Das hochgeladene File-Objekt
sort_order=0
gericht=newly_created_dish,
image=file,
sort_order=0 # Setze eine Standardreihenfolge
)
except Exception as e:
print(f"WARNUNG beim Speichern des Bildes {file.name}: {e}")
return super().form_valid() # Das Ergebnis muss immer zurückgegeben werden!
# Wir müssen danach explizit den Return-Wert festlegen, damit Django weitergeleitet werden kann.
return super().form_valid(form)
# Optional: Setzen des initialen Datenzustands (z.B. Datum, falls relevant)
def get_context_data(self, **kwargs):