from django.contrib.auth.models import AbstractUser from django.db import models from django.utils.translation import gettext_lazy as _ class User(AbstractUser): """ Custom User Model mit expliziter Rollenunterstützung. Erweitert das Standard-Django-User-Modell um ein 'role'-Feld, um Admins und Spieler klar zu trennen. """ class Role(models.TextChoices): ADMIN = 'admin', _('Administrator') PLAYER = 'player', _('Spieler') role = models.CharField( max_length=10, choices=Role.choices, default=Role.PLAYER, verbose_name=_('Rolle') ) def is_admin(self): return self.role == self.Role.ADMIN class Player(models.Model): """ Das reine Spielerprofil. Hinweis: Ein Spieler muss nicht unbedingt einen Account (Login) haben, da wir auch per CSV importierte Gäste unterstützen. Falls doch ein Account existiert, verknüpfen wir ihn hier 1-zu-1. """ user = models.OneToOneField( User, on_delete=models.SET_NULL, null=True, blank=True, related_name='player_profile', verbose_name=_('Benutzeraccount') ) first_name = models.CharField(_('Vorname'), max_length=100) last_name = models.CharField(_('Nachname'), max_length=100) club = models.CharField( _('Verein/Klasse'), max_length=150, blank=True, default='' ) class Meta: ordering = ['last_name', 'first_name'] verbose_name = 'Spieler' verbose_name_plural = 'Spieler' def __str__(self): return f"{self.first_name} {self.last_name} ({self.club})"