Hello,

We're building a web2py application that leverages SQLFORM.smartgrid 
heavily.  Out of the box, this does not support filtering on 1:M 
relationships, or reference fields on the model. We understand the concerns 
about this: It could potentially be a huge performance hit, especially if 
the related table has a large number of rows.

On the other hand, this functionality is very valuable. Being able to 
filter on related tables is a very common need in applications.  Often, 
users need to filter on "lookup" tables that have a relatively small number 
of rows, and the performance hit is negligible. This is a very common 
feature in Django, and in Rails admin interfaces like ActiveScaffold and 
RailsAdmin.

Example:

Given a model like this:

db.define_table('book',
    Field('user_id', 'reference auth_user'),
    Field('title'),
    Field('genre'))

And a controller like this:

def index():
    grid = SQLFORM.smartgrid(db.book)
    return dict(grid=grid)

The query interface will look like this by default:
http://i49.tinypic.com/2ugjt02.jpg

Note how this includes title and genre, but not the auth_user reference.

We patched web2py to allow to for 1:M reference fields in the query 
interface. The resulting interface and generated query look something like 
this:

http://i46.tinypic.com/28taq74.png

Here is our simple patch to allow searching on reference fields like this:

https://gist.github.com/ff543a5c6d3bc14b9079

This is obviously NOT ready for production; it's a simple proof of concept. 
 Note the potentially very expensive "ALL" query. Because of the 
performance risks, something like this only makes sense if developers can 
opt in, i.e. explicitly say so if they want to include a given reference 
field in the query interface.

1. Would the web2py maintiners be interested in a feature like this if it 
is opt-in?  I'm willing to devote some time to submit a more robust patch 
if I could get some guidance.

2. I also have a simple implementation for querying on list:reference 
fields that I can share as well.

Finally, I just want to thank the web2py team. I've really enjoyed using 
the framework and hope to help out as much as I can.

Thanks,
Mike Leone
Principal, Engineering
Panoptic Development, Inc.

-- 



Reply via email to