Refactor managers to improve queries.

See #969
 - Legacy-Id: 5548
This commit is contained in:
Emilio Jiménez 2013-03-11 07:48:52 +00:00
parent 7cd0f0b49a
commit fb772fc7aa
3 changed files with 41 additions and 12 deletions

39
ietf/nomcom/managers.py Normal file
View file

@ -0,0 +1,39 @@
from django.db import models
from django.db.models.query import QuerySet
class NomineePositionQuerySet(QuerySet):
def get_by_nomcom(self, nomcom):
return self.filter(position__nomcom=nomcom)
def by_state(self, state):
return self.filter(state=state)
def accepted(self):
""" only accepted objects """
return self.by_state('accepted')
def pending(self):
""" only pending objects """
return self.by_state('pending')
def declined(self):
""" only draft objects """
return self.by_state('declined')
class NomineePositionManager(models.Manager):
def get_query_set(self):
return NomineePositionQuerySet(self.model)
def __getattr__(self, attr, *args):
try:
return getattr(self.__class__, attr, *args)
except AttributeError:
return getattr(self.get_query_set(), attr, *args)
class NomineeManager(models.Manager):
def get_by_nomcom(self, nomcom):
return self.filter(nominee_position__nomcom=nomcom)

View file

@ -12,6 +12,7 @@ from ietf.group.models import Group
from ietf.name.models import NomineePositionState, FeedbackType
from ietf.dbtemplate.models import DBTemplate
from ietf.nomcom.managers import NomineePositionManager, NomineeManager
from ietf.nomcom.utils import (initialize_templates_for_group,
initialize_questionnaire_for_position,
initialize_requirements_for_position)
@ -59,11 +60,6 @@ class Nomination(models.Model):
return u"%s (%s)" % (self.candidate_name, self.candidate_email)
class NomineeManager(models.Manager):
def get_by_nomcom(self, nomcom):
return self.filter(nominee_position__nomcom=nomcom)
class Nominee(models.Model):
email = models.ForeignKey(Email)
@ -79,11 +75,6 @@ class Nominee(models.Model):
return u'%s' % self.email
class NomineePositionManager(models.Manager):
def get_by_nomcom(self, nomcom):
return self.filter(position__nomcom=nomcom)
class NomineePosition(models.Model):
position = models.ForeignKey('Position')

View file

@ -140,8 +140,7 @@ def send_reminder_mail(request, year):
from_email = settings.NOMCOM_FROM_EMAIL
for nominee in nominees:
to_email = nominee.email.address
positions = ', '.join([nominee_position.position.name for nominee_position in nominee.nomineeposition_set.all()
if nominee_position.state.slug == "pending"])
positions = ', '.join([nominee_position.position.name for nominee_position in nominee.nomineeposition_set.pending()])
context = {'positions': positions}
send_mail(None, to_email, from_email, subject, mail_path, context)
message = ('success', 'An query has been sent to each person, asking them to accept (or decline) the nominations')