Skip to content

Commit

Permalink
Started to implement ResultManager in core.models
Browse files Browse the repository at this point in the history
  • Loading branch information
pbellon committed Feb 18, 2014
1 parent 3ad857c commit 311a90a
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
34 changes: 31 additions & 3 deletions app/core/models.py
Expand Up @@ -181,9 +181,6 @@ def all_elements(self):
final_elements.append(final_element)
return final_elements

# def results(self):
# # return results aggregations for this thematic elements

# -----------------------------------------------------------------------------
#
# Feedbacks
Expand Down Expand Up @@ -240,12 +237,39 @@ def create_answer(self, question, user, value):
answer.save()
return answer



class ResultManager(models.Manager):

def all(self, question=None, gender=None, age_min=None, age_max=None):
qs = self.get_queryset(question=question, gender=gender, age_min=age_min, age_max=age_max)
return qs

def get_queryset(self, question=None, gender=None, age_min=None, age_max=None):
assert question != None, "ResultManager need a question to get your results"
qs = super(ResultManager, self).get_queryset().filter(question=question)
if gender != None:
assert gender in map(lambda x:x[0], GENDER_TYPES), ("The given gender ",
"({gender}) is not recognized as a valid gender.".format(gender=gender))

qs = qs.filter(user__profile__gender=gender)

if age_min and age_max:
qs = qs.filter(user__profile__age__lte=age_max, user__profile__age__gte=age_min)
return qs


class BaseAnswer(models.Model):
content_type = models.ForeignKey(ContentType, editable=False)
content_object = generic.GenericForeignKey('content_type', 'pk')
user = models.ForeignKey(settings.AUTH_USER_MODEL)
question = models.ForeignKey('BaseQuestion')
objects = AnswerManager()
results = ResultManager()





class TypedNumberAnswer(BaseAnswer):
value = models.IntegerField()
Expand Down Expand Up @@ -336,6 +360,10 @@ def as_final(self):
final_klass = self.content_type.model_class()
return final_klass.objects.get(id=self.pk)

@property
def results(self, gender=None, age_min=0, age_max=100):
return BaseAnswer.results.all(question=self, gender=gender, age_min=age_min, age_max=age_max )



class TypedNumberQuestion(BaseQuestion, ValidateButtonMixin):
Expand Down
1 change: 0 additions & 1 deletion app/core/signals.py
Expand Up @@ -66,7 +66,6 @@ def create_generic_element(sender, **kwargs):
def assign_content_object(sender, **kwargs):
# pre save creation of instance.content_object. Designed to ease downcasting
# for questions, answers and feedbacks
# import pdb; pdb.set_trace()
instance = kwargs.get('instance', None)
instance.content_type = ContentType.objects.get_for_model(instance)

Expand Down

0 comments on commit 311a90a

Please sign in to comment.