Skip to content

Commit fb772fc

Browse files
committed
Refactor managers to improve queries.
See ietf-tools#969 - Legacy-Id: 5548
1 parent 7cd0f0b commit fb772fc

3 files changed

Lines changed: 41 additions & 12 deletions

File tree

ietf/nomcom/managers.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from django.db import models
2+
from django.db.models.query import QuerySet
3+
4+
5+
class NomineePositionQuerySet(QuerySet):
6+
7+
def get_by_nomcom(self, nomcom):
8+
return self.filter(position__nomcom=nomcom)
9+
10+
def by_state(self, state):
11+
return self.filter(state=state)
12+
13+
def accepted(self):
14+
""" only accepted objects """
15+
return self.by_state('accepted')
16+
17+
def pending(self):
18+
""" only pending objects """
19+
return self.by_state('pending')
20+
21+
def declined(self):
22+
""" only draft objects """
23+
return self.by_state('declined')
24+
25+
26+
class NomineePositionManager(models.Manager):
27+
def get_query_set(self):
28+
return NomineePositionQuerySet(self.model)
29+
30+
def __getattr__(self, attr, *args):
31+
try:
32+
return getattr(self.__class__, attr, *args)
33+
except AttributeError:
34+
return getattr(self.get_query_set(), attr, *args)
35+
36+
37+
class NomineeManager(models.Manager):
38+
def get_by_nomcom(self, nomcom):
39+
return self.filter(nominee_position__nomcom=nomcom)

ietf/nomcom/models.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from ietf.name.models import NomineePositionState, FeedbackType
1313
from ietf.dbtemplate.models import DBTemplate
1414

15+
from ietf.nomcom.managers import NomineePositionManager, NomineeManager
1516
from ietf.nomcom.utils import (initialize_templates_for_group,
1617
initialize_questionnaire_for_position,
1718
initialize_requirements_for_position)
@@ -59,11 +60,6 @@ def __unicode__(self):
5960
return u"%s (%s)" % (self.candidate_name, self.candidate_email)
6061

6162

62-
class NomineeManager(models.Manager):
63-
def get_by_nomcom(self, nomcom):
64-
return self.filter(nominee_position__nomcom=nomcom)
65-
66-
6763
class Nominee(models.Model):
6864

6965
email = models.ForeignKey(Email)
@@ -79,11 +75,6 @@ def __unicode__(self):
7975
return u'%s' % self.email
8076

8177

82-
class NomineePositionManager(models.Manager):
83-
def get_by_nomcom(self, nomcom):
84-
return self.filter(position__nomcom=nomcom)
85-
86-
8778
class NomineePosition(models.Model):
8879

8980
position = models.ForeignKey('Position')

ietf/nomcom/views.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,7 @@ def send_reminder_mail(request, year):
140140
from_email = settings.NOMCOM_FROM_EMAIL
141141
for nominee in nominees:
142142
to_email = nominee.email.address
143-
positions = ', '.join([nominee_position.position.name for nominee_position in nominee.nomineeposition_set.all()
144-
if nominee_position.state.slug == "pending"])
143+
positions = ', '.join([nominee_position.position.name for nominee_position in nominee.nomineeposition_set.pending()])
145144
context = {'positions': positions}
146145
send_mail(None, to_email, from_email, subject, mail_path, context)
147146
message = ('success', 'An query has been sent to each person, asking them to accept (or decline) the nominations')

0 commit comments

Comments
 (0)