Using Sum() for a models method inside a Query

44 views
Skip to first unread message

Jorge Andrés Vergara Ebratt

unread,
Nov 23, 2014, 5:42:48 PM11/23/14
to django...@googlegroups.com
Hello everyone,

Well, the tittle says it all:

I have a model X

class X(models.Model)
    a = models.IntegerField()
    b = models.IntegerField()

def getC(self):
    return a + b


So, when I'm inside a template I can call {{x.getC}} and it gets the method for the current instance it's in, but how can I get the Sum, or Avg of that method? I tried doing Sum('getC') but I get the error because getC isn't callable in the query...

Thanks in advance for the help

--
Jorge Andres Vergara Ebratt
#SoftwareDeveloper (Or at least trying to be)
@javebratt

Vijay Khemlani

unread,
Nov 23, 2014, 7:42:38 PM11/23/14
to django...@googlegroups.com
What do you mean by the sum or average of the method? As in the sum or average of the method applied to a list of objects "X"?

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAAeX05Gb5oV%3DkiBcAeMdQ33jcau2B_yWYXFMgJbNB4Y8QMJ5Qw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Ethan Blackburn

unread,
Nov 23, 2014, 11:21:17 PM11/23/14
to django...@googlegroups.com
related: https://groups.google.com/forum/#!topic/django-users/s9qgXC4TNrA

Short answer: you can't. A raw query would be your best bet(i.e. "SELECT SUM(a + b) AS sum FROM app_X")

monoBOT

unread,
Nov 24, 2014, 3:53:55 AM11/24/14
to django...@googlegroups.com
You can create a model method (with no parameter) that can solve that, so you can call it from the templates.

something like:

class MyObject(models.Model):
    a = models.IntegerField()
    b = models.Integerfield()
    
    def miOperation(self):
        return self.a + self.b
    
    def miOtherOpertion(self):
        return self.a * self.b



--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.

For more options, visit https://groups.google.com/d/optout.



--
monoBOT
Visite mi sitio(Visit my site): monobotsoft.es/blog/

Jorge Andrés Vergara Ebratt

unread,
Nov 24, 2014, 6:53:56 AM11/24/14
to django...@googlegroups.com
Thanks, the best bet is the raw query, because I actually need the Sum of the method result for all the instances in the query...


For more options, visit https://groups.google.com/d/optout.



--

monoBOT

unread,
Nov 24, 2014, 7:20:52 AM11/24/14
to django...@googlegroups.com
You can also do that using the ORM instead of SQL, just instead of doing the calls on the instanced model use a manager and do the calls on all the objects in the database, something like this:

class Objectmanager(models.Manager):
    def SumAB(self):
        return sum([(obj.a + obj.b) for obj in MyObject.objects.all()])

class MyObject(models.Model):
    a = models.IntegerField()
    b = models.Integerfield()

    objects = ObjectManager()



For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages