diff --git a/media/gerichte_bilder/Nudeln_Tomatensoße3.jpeg b/media/gerichte_bilder/Nudeln_Tomatensoße3.jpeg index 03285e4..7e7f769 100644 Binary files a/media/gerichte_bilder/Nudeln_Tomatensoße3.jpeg and b/media/gerichte_bilder/Nudeln_Tomatensoße3.jpeg differ diff --git a/media/gerichte_bilder/pasta_tomato2.jpeg b/media/gerichte_bilder/pasta_tomato2.jpeg index 92ac142..dc181cb 100644 Binary files a/media/gerichte_bilder/pasta_tomato2.jpeg and b/media/gerichte_bilder/pasta_tomato2.jpeg differ diff --git a/mensa_app/admin.py b/mensa_app/admin.py index 8ed593c..5b8db43 100644 --- a/mensa_app/admin.py +++ b/mensa_app/admin.py @@ -3,33 +3,35 @@ from django.contrib import admin # Register your models here. from .models import Person # Ersetze dies durch deine echten Klassennamen -class PersonInlineChildren(admin.TabularInline): - """ - Inline für das Feld ``children`` (Schüler eines Elternteils). - Nur bei Eltern (Rolle Mitarbeit/Chef) sichtbar. - """ - model = Person.children.through # Das durchschnittliche Join‑Model - verbose_name = 'Kind' - verbose_name_plural = 'Kinder' - extra = 0 # Keine leeren Zeilen anzeigen - # ---------------------------------------------------------- - # **WICHTIG:** Hier wird der zu verwendende FK explizit genannt - # ---------------------------------------------------------- - fk_name = 'person' # <-- legt fest, welcher FK gemeint ist - - def has_add_permission(self, request, obj=None): - # Erlaube Hinzufügen nur für Eltern (Rolle Eltern) - return obj and obj.rolle in ('eltern') - - def formfield_for_foreignkey(self, db_field, request, **kwargs): - """ - Verhindere, dass ein Benutzer sich selbst als Kind hinzufügt. - """ - if db_field.name == "person": - # Hier handelt es sich um den FK auf die Person (das Ziel) - kwargs["queryset"] = Person.objects.exclude(pk=self.instance.pk) - return super().formfield_for_foreignkey(db_field, request, **kwargs) +# DELTE: Die Option, Kinder zuzuordnen soll zunächst nicht umgesetzt werden. +# class PersonInlineChildren(admin.TabularInline): +# """ +# Inline für das Feld ``children`` (Schüler eines Elternteils). +# Nur bei Eltern (Rolle Mitarbeit/Chef) sichtbar. +# """ +# model = Person.children.through # Das durchschnittliche Join‑Model +# verbose_name = 'Kind' +# verbose_name_plural = 'Kinder' +# extra = 0 # Keine leeren Zeilen anzeigen +# +# # ---------------------------------------------------------- +# # **WICHTIG:** Hier wird der zu verwendende FK explizit genannt +# # ---------------------------------------------------------- +# fk_name = 'person' # <-- legt fest, welcher FK gemeint ist +# +# def has_add_permission(self, request, obj=None): +# # Erlaube Hinzufügen nur für Eltern (Rolle Eltern) +# return obj and obj.rolle in ('eltern') +# +# def formfield_for_foreignkey(self, db_field, request, **kwargs): +# """ +# Verhindere, dass ein Benutzer sich selbst als Kind hinzufügt. +# """ +# if db_field.name == "person": +# # Hier handelt es sich um den FK auf die Person (das Ziel) +# kwargs["queryset"] = Person.objects.exclude(pk=self.instance.pk) +# return super().formfield_for_foreignkey(db_field, request, **kwargs) @admin.register(Person) class PersonAdmin(admin.ModelAdmin): @@ -37,8 +39,8 @@ class PersonAdmin(admin.ModelAdmin): search_fields = ['user__username', 'klasse'] ordering = ('rolle',) - # ---- Inline für Eltern (Rolle Mitarbeit/Chef) ---- - inlines = [PersonInlineChildren] # Zeigt das Kinder‑Inline nur bei passenden Rollen an + # # ---- Inline für Eltern (Rolle Mitarbeit/Chef) ---- + # inlines = [PersonInlineChildren] # Zeigt das Kinder‑Inline nur bei passenden Rollen an def has_change_permission(self, request, obj=None): """ diff --git a/mensa_app/migrations/0010_merge_20260612_0913.py b/mensa_app/migrations/0010_merge_20260612_0913.py new file mode 100644 index 0000000..2f16081 --- /dev/null +++ b/mensa_app/migrations/0010_merge_20260612_0913.py @@ -0,0 +1,14 @@ +# Generated by Django 5.2.14 on 2026-06-12 09:13 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('mensa_app', '0005_alter_bestellung_id_alter_gericht_id_and_more'), + ('mensa_app', '0009_alter_gericht_time_creation_and_more'), + ] + + operations = [ + ] diff --git a/mensa_app/models.py b/mensa_app/models.py index 05735a3..88062d2 100644 --- a/mensa_app/models.py +++ b/mensa_app/models.py @@ -19,55 +19,57 @@ class Person(models.Model): rolle = models.CharField(max_length=20, choices=[('schueler', 'Schüler'), ('eltern', 'Eltern'), ('lehrer', 'Lehrer'), ('mitarbeiter','Mensa-Mitarbeiter'), ('chef','Mensa-Leitung')]) klasse = models.CharField(max_length=4, blank=True, null=True) # Nur für Schüler relevant - # ---------------------------------------------------------------------- - # Neue Many‑to‑Many Beziehung: „Elternteil ↔ Schüler“ - # ---------------------------------------------------------------------- - children = models.ManyToManyField( - 'self', - blank=True, - related_name='parents', # → für einen Schüler: person.parents.all() - symmetrical=False, # Verhindert eine zirkuläre Rück‑Beziehung (nicht benötigt) - help_text=( - "Eltern können hier die ihnen zugewiesenen Schüler hinzufügen. Für Schüler bleibt dieses Feld leer." - ) - ) - # ------------------------------------------------------------------ - # Optional: Hilfsmethode, die alle Kinder zurückgibt, ggf. mit einer Sortierung - def get_children_sorted(self): - # Das `order_by('name')` ist ein Beispiel – du kannst deine eigene Sortierung verwenden. - return self.children.order_by('name') - - class Meta: - verbose_name_plural = "Personen" - - def __str__(self): - if self.children.exists(): - # Wir sammeln alle Kinder‑Namen in einem String, z. B. mit Komma getrennt. - children_names = ', '.join([c.name for c in self.children.all()]) - return f"{self.user.username} ({children_names}) ({self.rolle})" - else: - return f"{self.user.username} ({self.rolle})" - - def clean(self): - """ - Überprüfung für die ManyToMany-Beziehung ``children``: - - Nur Personen mit der Rolle 'mitarbeiter' oder 'chef' (Eltern) dürfen Kinder haben. - - Ein Schüler darf sich selbst nicht als Kind hinzufügen. - """ - super().clean() # ruft die Validierungen der Elternklasse auf (hier User/Model) - - if self.rolle in ('mitarbeiter', 'chef', 'lehrer'): - # Nicht‑Eltern dürfen keine Kinder besitzen - if self.children.exists(): - raise ValidationError( - "Nur Benutzer mit der Rolle 'Eltern' " - "dürfen Schüler zuordnen (children)." - ) - else: - # Eltern: Verhindere, dass sie sich selbst als Kind eintragen - if self in self.children.all(): - raise ValidationError("Ein Benutzer darf nicht gleichzeitig Elternteil und eigener Kind sein.") +# DELETE: Die Eltern-Kinder Beziehung soll zunächst nicht umgesetzt werden. + # # ---------------------------------------------------------------------- + # # Neue Many‑to‑Many Beziehung: „Elternteil ↔ Schüler“ + # # ---------------------------------------------------------------------- + # children = models.ManyToManyField( + # 'self', + # blank=True, + # related_name='parents', # → für einen Schüler: person.parents.all() + # symmetrical=False, # Verhindert eine zirkuläre Rück‑Beziehung (nicht benötigt) + # help_text=( + # "Eltern können hier die ihnen zugewiesenen Schüler hinzufügen. Für Schüler bleibt dieses Feld leer." + # ) + # ) +# + # # ------------------------------------------------------------------ + # # Optional: Hilfsmethode, die alle Kinder zurückgibt, ggf. mit einer Sortierung + # def get_children_sorted(self): + # # Das `order_by('name')` ist ein Beispiel – du kannst deine eigene Sortierung verwenden. + # return self.children.order_by('name') + # + # class Meta: + # verbose_name_plural = "Personen" + # + # def __str__(self): + # if self.children.exists(): + # # Wir sammeln alle Kinder‑Namen in einem String, z. B. mit Komma getrennt. + # children_names = ', '.join([c.name for c in self.children.all()]) + # return f"{self.user.username} ({children_names}) ({self.rolle})" + # else: + # return f"{self.user.username} ({self.rolle})" + # + # def clean(self): + # """ + # Überprüfung für die ManyToMany-Beziehung ``children``: + # - Nur Personen mit der Rolle 'mitarbeiter' oder 'chef' (Eltern) dürfen Kinder haben. + # - Ein Schüler darf sich selbst nicht als Kind hinzufügen. + # """ + # super().clean() # ruft die Validierungen der Elternklasse auf (hier User/Model) + # + # if self.rolle in ('mitarbeiter', 'chef', 'lehrer'): + # # Nicht‑Eltern dürfen keine Kinder besitzen + # if self.children.exists(): + # raise ValidationError( + # "Nur Benutzer mit der Rolle 'Eltern' " + # "dürfen Schüler zuordnen (children)." + # ) + # else: + # # Eltern: Verhindere, dass sie sich selbst als Kind eintragen + # if self in self.children.all(): + # raise ValidationError("Ein Benutzer darf nicht gleichzeitig Elternteil und eigener Kind sein.")