diff options
Diffstat (limited to 'ihatemoney/models.py')
| -rw-r--r-- | ihatemoney/models.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/ihatemoney/models.py b/ihatemoney/models.py index 8a7e273..4d32fd9 100644 --- a/ihatemoney/models.py +++ b/ihatemoney/models.py @@ -6,6 +6,7 @@ from flask import g, current_app from debts import settle from sqlalchemy import orm +from sqlalchemy.sql import func from itsdangerous import ( TimedJSONWebSignatureSerializer, URLSafeSerializer, @@ -17,6 +18,9 @@ db = SQLAlchemy() class Project(db.Model): + class ProjectQuery(BaseQuery): + def get_by_name(self, name): + return Project.query.filter(Project.name == name).one() id = db.Column(db.String(64), primary_key=True) @@ -25,6 +29,8 @@ class Project(db.Model): contact_email = db.Column(db.String(128)) members = db.relationship("Person", backref="project") + query_class = ProjectQuery + @property def _to_serialize(self): obj = { @@ -388,8 +394,11 @@ class Bill(db.Model): def pay_each(self): """Compute what each share has to pay""" if self.owers: - # FIXME: SQL might do that more efficiently - weights = sum(i.weight for i in self.owers) + weights = ( + db.session.query(func.sum(Person.weight)) + .join(billowers, Bill) + .filter(Bill.id == self.id) + ).scalar() return self.amount / weights else: return 0 |
