dr.botzo/races/models.py

64 lines
1.6 KiB
Python

"""Models for managing competitive races."""
import logging
from django.db import models
from django.utils import timezone
log = logging.getLogger('races.models')
class Race(models.Model):
"""Track a race."""
key = models.CharField(max_length=16, primary_key=True)
name = models.CharField(max_length=255)
description = models.TextField()
def __str__(self):
"""Text representation of a race."""
return "{0:s} ({1:s})".format(self.name, self.key)
class Racer(models.Model):
"""Track a racer in a race."""
nick = models.CharField(max_length=64)
race = models.ForeignKey(Race, on_delete=models.CASCADE)
joined = models.BooleanField(default=False)
started = models.BooleanField(default=False)
finished = models.BooleanField(default=False)
class Meta:
unique_together = ('nick', 'race')
def __str__(self):
"""Text representation of a race racer."""
return "{0:s} in {1:s}".format(self.nick, self.race.name)
class RaceUpdate(models.Model):
"""Periodic updates for a racer."""
race = models.ForeignKey(Race, on_delete=models.CASCADE)
racer = models.ForeignKey(Racer, on_delete=models.CASCADE)
update = models.TextField()
event_time = models.DateTimeField(default=timezone.now)
class Meta:
ordering = ['event_time',]
def __str__(self):
"""Text representation of a race update."""
local_time = timezone.localtime(self.event_time)
return "{0:s} in {1:s} @ {2:s}".format(self.racer.nick, self.race.name,
local_time.strftime('%Y-%m-%d %H:%M:%S %Z'))