Skip to content

Commit 497e439

Browse files
committed
Remove many to many fields with intermediary models from resources; instead handle these relations with separate resources
1 parent 4ee2b64 commit 497e439

File tree

2 files changed

+38
-14
lines changed

2 files changed

+38
-14
lines changed

api.py

+37-14
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ class Meta:
5959
class ClubResource(ModelResource):
6060
district = fields.ForeignKey(DistrictResource, 'district', full=True)
6161
# teams = fields.ToManyField('handball.api.TeamResource', 'teams')
62-
managers = fields.ToManyField('handball.api.PersonResource', 'managers')
62+
# members = fields.ToManyField('handball.api.PersonResource', 'members', blank=True)
63+
managers = fields.ToManyField('handball.api.PersonResource', 'managers', blank=True)
6364

6465
class Meta:
6566
queryset = Club.objects.all()
@@ -75,11 +76,15 @@ def obj_create(self, bundle, request=None, **kwargs):
7576
bundle.data['managers'] = ['/handball/api/v1/person/' + str(request.user.get_profile().id) + '/']
7677
return super(ClubResource, self).obj_create(bundle, request)
7778

79+
def dehydrate(self, bundle):
80+
del bundle.data['managers']
81+
return bundle
82+
7883

7984
class TeamResource(ModelResource):
8085
club = fields.ForeignKey(ClubResource, 'club', full=True)
81-
players = fields.ManyToManyField('handball.api.PersonResource', 'players')
82-
coaches = fields.ManyToManyField('handball.api.PersonResource', 'coaches')
86+
# players = fields.ManyToManyField('handball.api.PersonResource', 'players')
87+
# coaches = fields.ManyToManyField('handball.api.PersonResource', 'coaches')
8388
managers = fields.ManyToManyField('handball.api.PersonResource', 'managers')
8489

8590
class Meta:
@@ -99,12 +104,12 @@ def dehydrate(self, bundle):
99104

100105

101106
class PersonResource(ModelResource):
102-
user = fields.OneToOneField(UserResource, 'user', blank=True, null=True)
103-
clubs = fields.ManyToManyField(ClubResource, 'clubs')
107+
user = fields.OneToOneField(UserResource, 'user', blank=True, null=True, related_name='handball_profile')
108+
# clubs = fields.ManyToManyField(ClubResource, 'clubs', blank=True)
104109
clubs_managed = fields.ManyToManyField(ClubResource, 'clubs_managed', blank=True)
105-
teams = fields.ManyToManyField(TeamResource, 'teams', blank=True)
110+
# teams = fields.ManyToManyField(TeamResource, 'teams', blank=True)
106111
teams_managed = fields.ManyToManyField(TeamResource, 'teams_managed', blank=True)
107-
teams_coached = fields.ManyToManyField(TeamResource, 'teams_coached', blank=True)
112+
# teams_coached = fields.ManyToManyField(TeamResource, 'teams_coached', blank=True)
108113

109114
class Meta:
110115
queryset = Person.objects.all()
@@ -113,22 +118,30 @@ class Meta:
113118
excludes = ['activation_key', 'key_expires']
114119
filtering = {
115120
'user': ALL_WITH_RELATIONS,
116-
'clubs': ALL_WITH_RELATIONS,
121+
# 'clubs': ALL_WITH_RELATIONS,
117122
'clubs_managed': ALL_WITH_RELATIONS,
118-
'teams': ALL_WITH_RELATIONS,
123+
# 'teams': ALL_WITH_RELATIONS,
119124
'teams_managed': ALL_WITH_RELATIONS,
120-
'teams_coached': ALL_WITH_RELATIONS,
125+
# 'teams_coached': ALL_WITH_RELATIONS,
121126
'first_name': ['exact'],
122127
'last_name': ['exact']
123128
}
129+
always_return_data = True
124130

125131
def dehydrate(self, bundle):
126132
bundle.data['display_name'] = str(bundle.obj)
133+
134+
bundle.data['clubs'] = []
135+
resource = ClubResource()
136+
for membership in ClubMemberRelation.objects.filter(member=bundle.obj):
137+
clubBundle = resource.build_bundle(obj=membership.club, request=bundle.request)
138+
bundle.data['clubs'].append(resource.full_dehydrate(clubBundle))
139+
127140
# del bundle.data['clubs']
128-
del bundle.data['clubs_managed']
129-
del bundle.data['teams']
130-
del bundle.data['teams_managed']
131-
del bundle.data['teams_coached']
141+
# del bundle.data['clubs_managed']
142+
# del bundle.data['teams']
143+
# del bundle.data['teams_managed']
144+
# del bundle.data['teams_coached']
132145
return bundle
133146

134147

@@ -189,6 +202,16 @@ class Meta:
189202
include_resource_uri = False
190203

191204

205+
class ClubMemberRelationResource(ModelResource):
206+
club = fields.ForeignKey(ClubResource, 'club', full=True)
207+
member = fields.ForeignKey(PersonResource, 'member', full=True)
208+
209+
class Meta:
210+
queryset = ClubMemberRelation.objects.all()
211+
authorization = Authorization()
212+
authentication = Authentication()
213+
always_return_data = True
214+
192215
"""
193216
Non-resource api endpoints
194217
"""

urls.py

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
v1_api.register(GameResource())
1212
v1_api.register(LeagueResource())
1313
v1_api.register(DistrictResource())
14+
v1_api.register(ClubMemberRelationResource())
1415

1516
urlpatterns = patterns('handball.views',
1617
(r'^$', 'index')

0 commit comments

Comments
 (0)