Files

62 lines
1.6 KiB
Python

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})"