class Order(object):
def __init__(self, customer_name):
self.customer_name = customer_name
- items = AssociationProxy('itemassociations', 'item', creator=lambda x:OrderItem(x))
+ items = AssociationProxy('itemassociations', 'item', creator=lambda x, **kw:OrderItem(x, **kw))
class Item(object):
def __init__(self, description, price):
order.items.append(item('SA Mug'))
order.items.append(item('SA Hat'))
+# now append one more item, overriding the price
+order.items.append(item('SA T-Shirt'), price=2.99)
+
session.save(order)
session.flush()
result = SelectResults(session.query(Order)).join_to('item').select(and_(items.c.description=='MySQL Crowbar', items.c.price>orderitems.c.price))
print [order.customer_name for order in result]
+# print customers who got the special T-shirt discount
+result = SelectResults(session.query(Order)).join_to('item').select(and_(items.c.description=='SA T-Shirt', items.c.price>orderitems.c.price))
+print [order.customer_name for order in result]
+
return self._uselist
cls = property(_get_class)
uselist = property(_get_uselist)
- def create(self, target):
+ def create(self, target, **kw):
if self.creator is not None:
- return self.creator(target)
+ return self.creator(target, **kw)
else:
- assoc = self.cls()
+ assoc = self.cls(**kw)
setattr(assoc, self.attr, target)
return assoc
def __get__(self, obj, owner):
"""create a new AssociationList."""
self.proxy = proxy
self.parent = parent
- def append(self, item):
- a = self.proxy.create(item)
+ def append(self, item, **kw):
+ a = self.proxy.create(item, **kw)
getattr(self.parent, self.proxy.targetcollection).append(a)
def __iter__(self):
return iter([getattr(x, self.proxy.attr) for x in getattr(self.parent, self.proxy.targetcollection)])