diff --git a/db.sqlite3 b/db.sqlite3 index 99587ff..a8cf7ea 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/mensa_app/migrations/0012_gericht_beschreibung_alter_gericht_time_creation_and_more.py b/mensa_app/migrations/0012_gericht_beschreibung_alter_gericht_time_creation_and_more.py new file mode 100644 index 0000000..737bdfa --- /dev/null +++ b/mensa_app/migrations/0012_gericht_beschreibung_alter_gericht_time_creation_and_more.py @@ -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)), + ), + ] diff --git a/mensa_app/views.py b/mensa_app/views.py index 0aba06a..3d5c237 100644 --- a/mensa_app/views.py +++ b/mensa_app/views.py @@ -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):