Neues Gericht anlegen funktioniert!
This commit is contained in:
+29
@@ -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
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user