Skip to content

Commit 02c4d26

Browse files
committed
Allow players to be in multiple clubs; Add new hierarchic instance district as children of union; Add new model Group; Associate games with groups instead of unions and leagues; Automatically generate leagues for districts based on new model LeagueTemplate
1 parent 6146d01 commit 02c4d26

File tree

2 files changed

+58
-4
lines changed

2 files changed

+58
-4
lines changed

Diff for: admin.py

+3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33

44
admin.site.register(handball.models.Person)
55
admin.site.register(handball.models.Club)
6+
admin.site.register(handball.models.Group)
67
admin.site.register(handball.models.League)
8+
admin.site.register(handball.models.LeagueTemplate)
9+
admin.site.register(handball.models.District)
710
admin.site.register(handball.models.Union)
811
admin.site.register(handball.models.Game)
912
admin.site.register(handball.models.GameType)

Diff for: models.py

+55-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
from django.db import models
44
from django.contrib.auth.models import User
5-
from django.db.models.signals import post_save
5+
from django.db.models.signals import post_save, pre_save
66
from django.utils.translation import ugettext as _
77
from tastypie.models import create_api_key
88

99

1010
class Person(models.Model):
1111
user = models.OneToOneField(User, blank=True)
12-
club = models.ForeignKey('Club', related_name='members', blank=True)
12+
clubs = models.ManyToManyField('Club', related_name='members', blank=False)
1313

1414
# Fields used for user activation after signup
1515
activation_key = models.CharField(max_length=40, blank=True)
@@ -59,6 +59,39 @@ def __unicode__(self):
5959
class League(models.Model):
6060
name = models.CharField(max_length=50)
6161
gender = models.CharField(max_length=10, choices=(('male', _('male')), ('female', _('female'))))
62+
age_group = models.CharField(max_length=20, choices=(('adults', _('adults')), ('juniors', _('juniors')), ('kids', _('kids'))))
63+
64+
union = models.ForeignKey('Union', related_name='leagues', blank=True)
65+
district = models.ForeignKey('District', related_name='leagues', blank=True)
66+
managers = models.ManyToManyField('Person', blank=True, related_name='leagues_managed')
67+
68+
def __unicode__(self):
69+
return self.name
70+
71+
72+
class LeagueTemplate(models.Model):
73+
name = models.CharField(max_length=50)
74+
gender = models.CharField(max_length=10, choices=(('male', _('male')), ('female', _('female'))))
75+
age_group = models.CharField(max_length=20, choices=(('adults', _('adults')), ('juniors', _('juniors')), ('kids', _('kids'))))
76+
77+
def __unicode__(self):
78+
return self.name
79+
80+
81+
class Group(models.Model):
82+
name = models.CharField(max_length=50)
83+
84+
union = models.ForeignKey('Union', related_name='groups', blank=True)
85+
district = models.ForeignKey('District', related_name='groups', blank=True)
86+
league = models.ForeignKey('League', related_name='groups', blank=True)
87+
teams = models.ManyToManyField('Team', related_name='groups', blank=True)
88+
89+
90+
class District(models.Model):
91+
name = models.CharField(max_length=50)
92+
93+
union = models.ForeignKey('Union', related_name='districts')
94+
managers = models.ManyToManyField('Person', blank=True, related_name='districts_managed')
6295

6396
def __unicode__(self):
6497
return self.name
@@ -85,8 +118,9 @@ class Game(models.Model):
85118
timer = models.ForeignKey('Person', related_name='games_as_timer')
86119
secretary = models.ForeignKey('Person', related_name='games_as_secretary')
87120
winner = models.ForeignKey('Team', related_name='games_won')
88-
union = models.ForeignKey('Union')
89-
league = models.ForeignKey('League')
121+
# union = models.ForeignKey('Union')
122+
# league = models.ForeignKey('League')
123+
group = models.ForeignKey('Group', related_name='games')
90124
game_type = models.ForeignKey('GameType')
91125
site = models.ForeignKey('Site')
92126
players = models.ManyToManyField('Person', through='PlayerGameRelation')
@@ -149,7 +183,24 @@ def create_user_profile(sender, instance, created, **kwargs):
149183
if created:
150184
Person.objects.create(user=instance, first_name=instance.first_name, last_name=instance.last_name)
151185

186+
187+
def create_default_leagues(sender, instance, created, **kwargs):
188+
# Create defaults leagues for District after creation
189+
if created:
190+
templates = LeagueTemplate.objects.all()
191+
192+
for template in templates:
193+
League.objects.create(name=template.name, gender=template.gender, age_group=template.age_group, district=instance)
194+
195+
196+
def set_union_by_district(sender, instance, **kwargs):
197+
# Set according union if district is set
198+
if instance.district:
199+
instance.union = instance.district.union
200+
152201
# post_save.connect(create_user_profile, sender=User)
153202

154203
# Create API key for a new user
155204
post_save.connect(create_api_key, sender=User)
205+
post_save.connect(create_default_leagues, sender=District)
206+
pre_save.connect(set_union_by_district, sender=League)

0 commit comments

Comments
 (0)