47 lines
2.1 KiB
Python

from django.db import models
from django.conf import settings
import urllib.parse
class Event(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
start_time = models.DateTimeField()
end_time = models.DateTimeField(null=True, blank=True)
location_address = models.CharField(max_length=255)
maps_shortlink = models.URLField(blank=True, editable=False)
team = models.ForeignKey('clubs.Team', on_delete=models.CASCADE, related_name='events')
def save(self, *args, **kwargs):
if self.location_address and not self.maps_shortlink:
self.maps_shortlink = f"https://www.google.com/maps/search/?api=1&query={urllib.parse.quote(self.location_address)}"
super().save(*args, **kwargs)
def __str__(self):
return self.title
class Training(Event):
pass
class Game(Event):
opponent = models.CharField(max_length=255)
meeting_minutes_before_game = models.PositiveIntegerField(default=60)
season = models.CharField(max_length=255, blank=True)
min_players = models.PositiveIntegerField(default=9)
is_home_game = models.BooleanField(default=True)
opened_for_teams = models.ManyToManyField('clubs.Team', related_name='opened_games', blank=True)
class GameResult(models.Model):
game = models.OneToOneField(Game, on_delete=models.CASCADE, related_name='result')
# A simple way to store inning results as a string. A more complex solution could use a JSONField or separate Inning model.
inning_results = models.CharField(max_length=255, help_text="Comma-separated scores per inning, e.g., '1-0,0-2,3-1'")
def __str__(self):
return f"Result for {self.game}"
class EventParticipation(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
status = models.CharField(max_length=20, choices=[('attending', 'Attending'), ('rejected', 'Rejected'), ('maybe', 'Maybe')], default='maybe')
class Meta:
unique_together = ('user', 'event')