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) @admin.register(Person) class PersonAdmin(admin.ModelAdmin): list_display = ('user', 'rolle', 'klasse') 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 def has_change_permission(self, request, obj=None): """ Optional: Verhindere, dass ein Schüler seine eigene Rolle oder die Zuordnung ändert. """ return super().has_change_permission(request, obj) from .models import Schulwoche # Ersetze dies durch deine echten Klassennamen admin.site.register(Schulwoche) from .models import SpeiseplanTag # Ersetze dies durch deine echten Klassennamen admin.site.register(SpeiseplanTag) from .models import Kategorie # Ersetze dies durch deine echten Klassennamen admin.site.register(Kategorie) from .models import Gericht # Ersetze dies durch deine echten Klassennamen # admin.site.register(Gericht) from .models import Menue # Ersetze dies durch deine echten Klassennamen admin.site.register(Menue) from .models import Bestellung # Ersetze dies durch deine echten Klassennamen admin.site.register(Bestellung) from .models import Bewertung admin.site.register(Bewertung) from .models import GerichtBild admin.site.register(GerichtBild) class GerichtBildInline(admin.TabularInline): model = GerichtBild extra = 0 # Keine leeren Zeilen anzeigen (kann später auf 1 erhöht werden) readonly_fields = ('image',) # Optional: Nur zur Anzeige, nicht editierbar @admin.register(Gericht) class GerichtAdmin(admin.ModelAdmin): list_display = ('name', 'kategorie') inlines = [GerichtBildInline] # Das Inline erscheint direkt unter jedem Gericht