from django.db import models from django.utils.translation import gettext_lazy as _ class Tournament(models.Model): """Stellt ein komplettes Turnier dar.""" name = models.CharField(_('Turniername'), max_length=200) date = models.DateField(_('Datum')) description = models.TextField(_('Beschreibung'), blank=True, default='') created_at = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['-date'] def __str__(self): return f"{self.name} ({self.date})" class Registration(models.Model): """Verknüpfungstabelle zwischen Turnier und Spielern.""" tournament = models.ForeignKey( Tournament, on_delete=models.CASCADE, related_name='registrations' ) # FIX: App-Label hinzugefügt ('accounts.Player') player = models.ForeignKey( 'accounts.Player', on_delete=models.CASCADE ) class Meta: unique_together = ('tournament', 'player') class Round(models.Model): """Eine einzelne Runde im Turnier.""" tournament = models.ForeignKey( Tournament, on_delete=models.CASCADE, related_name='rounds' ) round_number = models.PositiveIntegerField(_('Rundennummer')) class Meta: unique_together = ('tournament', 'round_number') ordering = ['round_number'] def __str__(self): return f"{self.tournament.name} - Runde {self.round_number}" class Match(models.Model): """Einzelnes Spiel (Paarung) innerhalb einer Runde.""" class ResultStatus(models.TextChoices): PENDING = 'pending', _('Ausstehend') WHITE_WIN = 'white_win', _('Weiß gewinnt') BLACK_WIN = 'black_win', _('Schwarz gewinnt') DRAW = 'draw', _('Unentschieden') round_detail = models.ForeignKey( Round, on_delete=models.CASCADE, related_name='matches' ) # FIX: App-Label explizit gesetzt ('accounts.Player') player_white = models.ForeignKey( 'accounts.Player', on_delete=models.PROTECT, related_name='matches_as_white', verbose_name=_('Weißer Spieler') ) player_black = models.ForeignKey( 'accounts.Player', on_delete=models.PROTECT, related_name='matches_as_black', verbose_name=_('Schwarzer Spieler') ) result = models.CharField( max_length=10, choices=ResultStatus.choices, default=ResultStatus.PENDING ) class Meta: unique_together = ('round_detail', 'player_white', 'player_black') def __str__(self): return f"{self.player_white} vs {self.player_black} ({self.round_detail})"