Skip to content

Commit 652ffbe

Browse files
committed
Significant changes in data model;
1 parent 7b066f4 commit 652ffbe

File tree

4 files changed

+93
-100
lines changed

4 files changed

+93
-100
lines changed

admin.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,13 @@ class GameAdmin(admin.ModelAdmin):
4141
admin.site.register(handball.models.Person, PersonAdmin)
4242
admin.site.register(handball.models.Club, ClubAdmin)
4343
admin.site.register(handball.models.Group)
44-
admin.site.register(handball.models.League)
45-
admin.site.register(handball.models.LeagueTemplate)
4644
admin.site.register(handball.models.District)
4745
admin.site.register(handball.models.Union)
4846
admin.site.register(handball.models.Game, GameAdmin)
49-
admin.site.register(handball.models.GameType)
5047
admin.site.register(handball.models.Team, TeamAdmin)
5148
admin.site.register(handball.models.Site)
5249
admin.site.register(handball.models.Event)
5350
admin.site.register(handball.models.EventType)
5451
admin.site.register(handball.models.GamePlayerRelation)
52+
admin.site.register(handball.models.LeagueLevel)
53+
admin.site.register(handball.models.AgeGroup)

api.py

+18-21
Original file line numberDiff line numberDiff line change
@@ -52,23 +52,19 @@ def dehydrate(self, bundle):
5252
return bundle
5353

5454

55-
class LeagueResource(ModelResource):
56-
class Meta:
57-
queryset = League.objects.all()
58-
allowed_methods = ['get']
59-
authentication = Authentication()
60-
authorization = Authorization()
61-
62-
def dehydrate(self, bundle):
63-
bundle.data['display_name'] = str(bundle.obj)
64-
return bundle
65-
66-
6755
class GroupResource(ModelResource):
56+
union = fields.ForeignKey(UnionResource, 'union', blank=True, null=True)
57+
district = fields.ForeignKey(DistrictResource, 'district', blank=True, null=True)
58+
6859
class Meta:
6960
queryset = Group.objects.all()
70-
authorization = Authorization()
61+
# allowed_methods = ['get', '']
7162
authentication = Authentication()
63+
authorization = Authorization()
64+
filtering = {
65+
'union': ALL_WITH_RELATIONS,
66+
'district': ALL_WITH_RELATIONS
67+
}
7268

7369

7470
class PersonResource(ModelResource):
@@ -161,13 +157,6 @@ def dehydrate(self, bundle):
161157
return bundle
162158

163159

164-
class GameTypeResource(ModelResource):
165-
class Meta:
166-
queryset = GameType.objects.all()
167-
authorization = Authorization()
168-
authentication = Authentication()
169-
170-
171160
class SiteResource(ModelResource):
172161
class Meta:
173162
queryset = Site.objects.all()
@@ -184,7 +173,6 @@ class GameResource(ModelResource):
184173
supervisor = fields.ForeignKey(PersonResource, 'supervisor')
185174
winner = fields.ForeignKey(TeamResource, 'winner', null=True)
186175
group = fields.ForeignKey(GroupResource, 'group')
187-
game_type = fields.ForeignKey(GameTypeResource, 'game_type')
188176
site = fields.ForeignKey(SiteResource, 'site')
189177
events = fields.ToManyField('handball.api.EventResource', 'events', full=True)
190178

@@ -323,6 +311,15 @@ def obj_create(self, bundle, request=None, **kwargs):
323311
return super(TeamManagerRelationResource, self).obj_create(bundle, request)
324312

325313

314+
class LeagueLevelResource(ModelResource):
315+
class Meta:
316+
queryset = LeagueLevel.objects.all()
317+
authorization = Authorization()
318+
authentication = Authentication()
319+
always_return_data = True
320+
allowed_methods = ['get']
321+
322+
326323
# class LeagueManagerRelationResource(ModelResource):
327324
# league = fields.ForeignKey(LeagueResource, 'league', full=True)
328325
# manager = fields.ForeignKey(PersonResource, 'manager', full=True)

models.py

+72-74
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,23 @@
77
from tastypie.models import create_api_key
88

99

10-
class Person(models.Model):
11-
user = models.OneToOneField(User, blank=True, null=True, related_name='handball_profile')
10+
class Union(models.Model):
11+
name = models.CharField(max_length=50)
1212

13-
first_name = models.CharField(max_length=50)
14-
last_name = models.CharField(max_length=50)
15-
address = models.CharField(max_length=50, blank=True)
16-
city = models.CharField(max_length=50, blank=True)
17-
zip_code = models.IntegerField(null=True, blank=True)
18-
birthday = models.DateField(null=True, blank=True)
19-
pass_number = models.IntegerField(null=True, blank=True)
20-
gender = models.CharField(max_length=10, choices=(('male', _('male')), ('female', _('female'))), default='male')
21-
mobile_number = models.CharField(max_length=20, blank=True)
13+
managers = models.ManyToManyField('Person', blank=True, related_name='unions_managed', through='UnionManagerRelation')
2214

2315
def __unicode__(self):
24-
return self.first_name + ' ' + self.last_name
16+
return self.name
2517

2618

27-
class Team(models.Model):
19+
class District(models.Model):
2820
name = models.CharField(max_length=50)
29-
validated = models.BooleanField(blank=True, default=False)
3021

31-
players = models.ManyToManyField('Person', blank=True, related_name='teams', through='TeamPlayerRelation')
32-
coaches = models.ManyToManyField('Person', blank=True, related_name='teams_coached', through='TeamCoachRelation')
33-
# league = models.ForeignKey('League', related_name='league', blank=True)
34-
club = models.ForeignKey('Club', related_name='teams')
35-
managers = models.ManyToManyField('Person', blank=True, related_name='teams_managed', through='TeamManagerRelation')
22+
union = models.ForeignKey('Union', related_name='districts')
23+
managers = models.ManyToManyField('Person', blank=True, related_name='districts_managed', through='DistrictManagerRelation')
3624

3725
def __unicode__(self):
38-
return self.club.name + ' ' + self.name
26+
return self.name
3927

4028

4129
class Club(models.Model):
@@ -51,64 +39,82 @@ def __unicode__(self):
5139
return self.name
5240

5341

54-
class League(models.Model):
42+
class Team(models.Model):
5543
name = models.CharField(max_length=50)
56-
gender = models.CharField(max_length=10, choices=(('male', _('male')), ('female', _('female'))))
57-
age_group = models.CharField(max_length=20, choices=(('adults', _('adults')), ('juniors', _('juniors')), ('kids', _('kids'))))
44+
validated = models.BooleanField(blank=True, default=False)
5845

59-
union = models.ForeignKey('Union', related_name='leagues', blank=True)
60-
district = models.ForeignKey('District', related_name='leagues', blank=True)
61-
managers = models.ManyToManyField('Person', blank=True, related_name='leagues_managed', through='LeagueManagerRelation')
46+
players = models.ManyToManyField('Person', blank=True, related_name='teams', through='TeamPlayerRelation')
47+
coaches = models.ManyToManyField('Person', blank=True, related_name='teams_coached', through='TeamCoachRelation')
48+
# league = models.ForeignKey('League', related_name='league', blank=True)
49+
club = models.ForeignKey('Club', related_name='teams')
50+
managers = models.ManyToManyField('Person', blank=True, related_name='teams_managed', through='TeamManagerRelation')
6251

6352
def __unicode__(self):
64-
return u'{0} {1} {2}'.format(self.name, self.gender, self.age_group)
53+
return self.club.name + ' ' + self.name
6554

6655

67-
class LeagueTemplate(models.Model):
56+
class LeagueLevel(models.Model):
6857
name = models.CharField(max_length=50)
69-
gender = models.CharField(max_length=10, choices=(('male', _('male')), ('female', _('female'))))
70-
age_group = models.CharField(max_length=20, choices=(('adults', _('adults')), ('juniors', _('juniors')), ('kids', _('kids'))))
7158

72-
def __unicode__(self):
73-
return u'{0} {1} {2}'.format(self.name, self.gender, self.age_group)
59+
union_specific = models.BooleanField(default=False)
60+
district_specific = models.BooleanField(default=False)
61+
62+
63+
class AgeGroup(models.Model):
64+
name = models.CharField(max_length=20)
65+
66+
min_age = models.IntegerField()
67+
max_age = models.IntegerField()
7468

7569

7670
class Group(models.Model):
7771
name = models.CharField(max_length=50)
72+
kind = models.CharField(max_length=20, choices=(('league', _('league')), ('cup', _('cup')), ('tournament', _('tournament'))))
73+
gender = models.CharField(max_length=10, choices=(('male', _('male')), ('female', _('female'))), default='male')
7874

79-
union = models.ForeignKey('Union', related_name='groups', blank=True)
80-
district = models.ForeignKey('District', related_name='groups', blank=True)
81-
league = models.ForeignKey('League', related_name='groups', blank=True)
82-
teams = models.ManyToManyField('Team', related_name='groups', blank=True)
75+
level = models.ForeignKey('LeagueLevel', blank=True, null=True)
76+
age_group = models.CharField(max_length=20, choices=(('adults', _('adults')), ('juniors_a', _('juniors a')),
77+
('juniors_b', _('juniors b')), ('juniors_c', _('juniors c')), ('juniors_d', _('juniors d')), ('juniors_e', _('juniors e'))))
78+
union = models.ForeignKey('Union', related_name='leagues', blank=True, null=True)
79+
district = models.ForeignKey('District', related_name='leagues', blank=True, null=True)
80+
teams = models.ManyToManyField('Team', related_name='groups', through='GroupTeamRelation')
81+
managers = models.ManyToManyField('Person', blank=True, related_name='groups_managed', through='GroupManagerRelation')
8382

8483
def __unicode__(self):
85-
return u'{0}, {1}, {2}, {3}'.format(self.name, self.league.name, self.league.gender, self.league.age_group, self.league.district.name)
86-
84+
return u'{0}: {1} {2} {3}'.format(self.kind, self.name, self.gender, self.age_group.name)
8785

88-
class District(models.Model):
89-
name = models.CharField(max_length=50)
9086

91-
union = models.ForeignKey('Union', related_name='districts')
92-
managers = models.ManyToManyField('Person', blank=True, related_name='districts_managed', through='DistrictManagerRelation')
87+
class GroupTeamRelation(models.Model):
88+
group = models.ForeignKey('Group')
89+
team = models.ForeignKey('Team')
9390

94-
def __unicode__(self):
95-
return self.name
91+
points = models.IntegerField()
92+
position = models.IntegerField()
9693

9794

98-
class Union(models.Model):
99-
name = models.CharField(max_length=50)
95+
class Person(models.Model):
96+
user = models.OneToOneField(User, blank=True, null=True, related_name='handball_profile')
10097

101-
managers = models.ManyToManyField('Person', blank=True, related_name='unions_managed', through='UnionManagerRelation')
98+
first_name = models.CharField(max_length=50)
99+
last_name = models.CharField(max_length=50)
100+
address = models.CharField(max_length=50, blank=True)
101+
city = models.CharField(max_length=50, blank=True)
102+
zip_code = models.IntegerField(null=True, blank=True)
103+
birthday = models.DateField(null=True, blank=True)
104+
pass_number = models.IntegerField(null=True, blank=True)
105+
gender = models.CharField(max_length=10, choices=(('male', _('male')), ('female', _('female'))), default='male')
106+
mobile_number = models.CharField(max_length=20, blank=True)
102107

103108
def __unicode__(self):
104-
return self.name
109+
return self.first_name + ' ' + self.last_name
105110

106111

107112
class Game(models.Model):
108113
number = models.IntegerField(unique=True, blank=True, null=True)
109114
start = models.DateTimeField()
110115
score_home = models.IntegerField()
111116
score_away = models.IntegerField()
117+
duration = models.IntegerField(default=60)
112118

113119
home = models.ForeignKey('Team', related_name='games_home')
114120
away = models.ForeignKey('Team', related_name='games_away')
@@ -117,22 +123,15 @@ class Game(models.Model):
117123
secretary = models.ForeignKey('Person', related_name='games_as_secretary')
118124
supervisor = models.ForeignKey('Person', related_name='games_as_supervisor')
119125
winner = models.ForeignKey('Team', related_name='games_won', blank=True, null=True)
120-
group = models.ForeignKey('Group', related_name='games')
121-
game_type = models.ForeignKey('GameType')
126+
group = models.ForeignKey('Group', related_name='games', blank=True, null=True)
127+
# game_type = models.CharField(max_length=20, choices=(('cub', _('cub')), ('friendly', _('friendly')), ('league', _('league')), ('tournament', _('tournament'))))
122128
site = models.ForeignKey('Site')
123129
players = models.ManyToManyField('Person', through='GamePlayerRelation')
124130

125131
def __unicode__(self):
126132
return u'{0}/{1}/{2}: {3} {4} vs. {5} {6}'.format(self.start.year, self.start.month, self.start.day, self.home.club.name, self.home.name, self.away.club.name, self.away.name)
127133

128134

129-
class GameType(models.Model):
130-
name = models.CharField(max_length=20)
131-
132-
def __unicode__(self):
133-
return self.name
134-
135-
136135
class Site(models.Model):
137136
# name = models.CharField(max_length=50)
138137
address = models.CharField(max_length=50)
@@ -180,7 +179,7 @@ class TeamCoachRelation(models.Model):
180179
coach = models.ForeignKey('Person')
181180
team = models.ForeignKey('Team')
182181

183-
member_confirmed = models.BooleanField(default=False)
182+
coach_confirmed = models.BooleanField(default=False)
184183
manager_confirmed = models.BooleanField(default=False)
185184

186185

@@ -196,10 +195,10 @@ class TeamManagerRelation(models.Model):
196195
appointed_by = models.ForeignKey(User, related_name='handball_team_managers_appointed', blank=True, null=True)
197196

198197

199-
class LeagueManagerRelation(models.Model):
200-
league = models.ForeignKey('League')
198+
class GroupManagerRelation(models.Model):
199+
group = models.ForeignKey('Group')
201200
manager = models.ForeignKey('Person')
202-
appointed_by = models.ForeignKey(User, related_name='handball_league_managers_appointed', blank=True, null=True)
201+
appointed_by = models.ForeignKey(User, related_name='handball_group_managers_appointed', blank=True, null=True)
203202

204203

205204
class DistrictManagerRelation(models.Model):
@@ -230,29 +229,28 @@ def __unicode__(self):
230229
return self.name
231230

232231

233-
def create_default_leagues(sender, instance, created, **kwargs):
234-
# Create defaults leagues for District after creation
235-
if created:
236-
templates = LeagueTemplate.objects.all()
237-
238-
for template in templates:
239-
League.objects.create(name=template.name, gender=template.gender, age_group=template.age_group, district=instance)
240-
241-
242232
def set_union_by_district(sender, instance, **kwargs):
243233
# If district is set, set according union
244234
if instance.district:
245235
instance.union = instance.district.union
246236

247237

248-
def set_club_by_team(sender, instance, created, **kwargs):
238+
def player_to_club_member(sender, instance, created, **kwargs):
249239
try:
250240
ClubMemberRelation.objects.get(member=instance.player, club=instance.team.club)
251241
except ClubMemberRelation.DoesNotExist:
252242
ClubMemberRelation.objects.create(member=instance.player, club=instance.team.club,
253243
manager_confirmed=instance.manager_confirmed, member_confirmed=instance.player_confirmed)
254244

255245

246+
def coach_to_club_member(sender, instance, created, **kwargs):
247+
try:
248+
ClubMemberRelation.objects.get(member=instance.coach, club=instance.team.club)
249+
except ClubMemberRelation.DoesNotExist:
250+
ClubMemberRelation.objects.create(member=instance.coach, club=instance.team.club,
251+
manager_confirmed=instance.manager_confirmed, member_confirmed=instance.coach_confirmed)
252+
253+
256254
def add_player_to_team(sender, instance, created, **kwargs):
257255
try:
258256
TeamPlayerRelation.objects.get(team=instance.team, player=instance.player)
@@ -287,9 +285,9 @@ def club_primary_check(sender, instance, **kwargs):
287285

288286
# Create API key for a new user
289287
post_save.connect(create_api_key, sender=User)
290-
post_save.connect(create_default_leagues, sender=District)
291-
pre_save.connect(set_union_by_district, sender=League)
292-
post_save.connect(set_club_by_team, sender=TeamPlayerRelation)
288+
pre_save.connect(set_union_by_district, sender=Group)
289+
post_save.connect(player_to_club_member, sender=TeamPlayerRelation)
290+
post_save.connect(coach_to_club_member, sender=TeamCoachRelation)
293291
post_save.connect(add_player_to_team, sender=GamePlayerRelation)
294292
post_save.connect(club_member_to_manager, sender=ClubMemberRelation)
295293
post_save.connect(team_player_to_manager, sender=TeamPlayerRelation)

urls.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
v1_api.register(TeamResource())
1010
v1_api.register(PersonResource())
1111
v1_api.register(GameResource())
12-
v1_api.register(LeagueResource())
1312
v1_api.register(DistrictResource())
1413
v1_api.register(ClubMemberRelationResource())
1514
v1_api.register(SiteResource())
16-
v1_api.register(GameTypeResource())
1715
v1_api.register(GroupResource())
1816
v1_api.register(EventResource())
1917
v1_api.register(EventTypeResource())
@@ -22,6 +20,7 @@
2220
v1_api.register(TeamCoachRelationResource())
2321
v1_api.register(ClubManagerRelationResource())
2422
v1_api.register(TeamManagerRelationResource())
23+
v1_api.register(LeagueLevelResource())
2524

2625
urlpatterns = patterns('', (r'^', include(v1_api.urls)))
2726

0 commit comments

Comments
 (0)