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 datetime import datetime
from django.views.generic import ListView, TemplateView from django.views.generic import ListView, TemplateView
from django.views.generic.edit import CreateView 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 .forms import GerichtForm # Importiere dein neues Formular
from .models import Gericht, Menue, SpeiseplanTag, Bestellung from .models import Gericht, Menue, SpeiseplanTag, Bestellung
@@ -113,31 +113,32 @@ class GerichtCreateView(CreateView):
def form_valid(self, form): def form_valid(self, form):
""" """
Der magische Hook: Wird ausgeführt, wenn das Formular erfolgreich validiert wurde. Die korrigierte Version der Form-Validierung.
Wir speichern ZUERST das Hauptobjekt (Gericht) und DANN die Kinder (Bilder). 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 !!! # Jetzt sind wir sicher, dass das Objekt gespeichert wurde und Zugriff auf das neu erstellte Objekt haben:
# Das super().form_valid() MUSS der ALLERERSTE Befehl sein, damit Django weiß, newly_created_dish = self.object
# 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
# 2. Bildverarbeitung (Nur ausführen, wenn Dateien hochgeladen wurden) # 2. Bilder verarbeiten (Der kritische Schritt nach der Speicherung)
uploaded_files = self.request.FILES.getlist('bilder') uploaded_files = self.request.FILES.getlist('bilder') # Achtung: self.request wird hier genutzt!
if uploaded_files: if uploaded_files:
for file in uploaded_files: for file in uploaded_files:
try: try:
GerichtBild.objects.create( GerichtBild.objects.create(
gericht=newly_created_dish, # Verknüpfung zum Parent (neue Instance) gericht=newly_created_dish,
image=file, # Das hochgeladene File-Objekt image=file,
sort_order=0 sort_order=0 # Setze eine Standardreihenfolge
) )
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! # 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) # Optional: Setzen des initialen Datenzustands (z.B. Datum, falls relevant)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):