Changeset 3526
- Timestamp:
- 10/19/07 15:14:37 (1 year ago)
- Files:
-
- branches/1.1/CHANGELOG.txt (modified) (2 diffs)
- branches/1.1/turbogears/paginate.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.1/CHANGELOG.txt
r3511 r3526 9 9 *Features* 10 10 * "tg-admin sql" is now more powerful for SQLAlchemy. Ticket #1418 11 * Paginate allows ordering by attributes from related objects (SQLAlchemy 12 Query objects only). Ticket #1582. 11 13 12 14 *Fixes* … … 18 20 error when paginating Query objects (sqlalchemy) and ordering by 4 or more 19 21 columns. 22 * Ticket #1434: Fixed pagination of Query objects (SQLAlchemy). The first 23 patch assumed that Query objects have a _query attribute which holds the 24 query object, which is only true for SelectResults objects. 20 25 21 26 *Contributors* 22 27 23 Paul Johnston, R oger Demetrescu28 Paul Johnston, Remi Jolin, Jonathan Hitchcock, Roger Demetrescu 24 29 25 30 branches/1.1/turbogears/paginate.py
r3511 r3526 342 342 col = getattr(var_data.sourceClass.q, colname, None) 343 343 344 elif isinstance(var_data, SASelectResults) or isinstance(var_data, Query):344 elif isinstance(var_data, SASelectResults): 345 345 col = getattr( 346 346 var_data._query.mapper.c, … … 348 348 None) 349 349 350 elif isinstance(var_data, Query): 351 col = getattr( 352 var_data.mapper.c, 353 colname[len(var_data.mapper.column_prefix or ''):], 354 None) 355 #if no attribute is found, let's try searching for 'foreign' objects... 356 # eg.: address.user.occupation.name 357 if not col and colname.find('.'): 358 seq = colname.split('.') 359 mapper = var_data.mapper 360 for propname in seq[:-1]: 361 prop = mapper.properties.get(propname) 362 if not prop: 363 break 364 mapper = prop.mapper 365 # last item from split should be a simple attribute 366 col = getattr( 367 mapper.c, 368 seq[-1][len(mapper.column_prefix or ''):], 369 None) 350 370 else: 351 371 raise StandardError, 'expected SelectResults' … … 372 392 373 393 # Ordering re: 374 ordering_expr = re.compile(r"('\w+ '): ?\[(\d+), ?(True|False)\]")394 ordering_expr = re.compile(r"('\w+(\.\w+)*'): ?\[(\d+), ?(True|False)\]") 375 395 376 396 def convert_ordering(ordering): … … 392 412 for ordering_info in ordering_info_find: 393 413 ordering_key = str(ordering_info[0]).strip("'") 394 ordering_order = int(ordering_info[ 1])395 ordering_reverse = bool(ordering_info[ 2] == 'True')414 ordering_order = int(ordering_info[2]) 415 ordering_reverse = bool(ordering_info[3] == 'True') 396 416 new_ordering[ordering_key] = [ordering_order, 397 417 ordering_reverse]