Files
SGTMensa/mensa_app/admin.py

91 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 JoinModel
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 KinderInline 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