91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
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
|
||
|