Pegase745 / sqlalchemy-datatables

SQLAlchemy integration of jQuery DataTables >= 1.10.x (Pyramid and Flask examples)
MIT License
159 stars 67 forks source link

what is best way to configure sqlalchemy-datatables for columns which are not in database? #53

Closed louking closed 8 years ago

louking commented 8 years ago

Using 0.4.0 sqlalchemy-datatables, from client I am using Editor, and datatables sends the "select" column with a blank name. I suspect this is causing an IndexError. What is best way to configure ColumnDT for the case when column is not in database, but generated at client?

Current configuration

        columns = [
            ColumnDT('',                    mData='',                   searchable=False),
            ColumnDT('place',               mData='place'), 
            ColumnDT('name',                mData='resultname'),
            ColumnDT('gender',              mData='gender',             searchable=False),
            ColumnDT('age',                 mData='age',                searchable=False,   filterarg='row', filter=renderage),
            ColumnDT('initialdisposition',  mData='membertype'),
            ColumnDT('confirmed',           mData='confirm',          searchable=False),
            ColumnDT('runnerid',            mData='runnerid'),
            ColumnDT('hometown',            mData='hometown'),
            ColumnDT('club',                mData='club'),
            ColumnDT('time',                mData='time',               searchable=False,   filter=lambda c: render.rendertime(c, 0)),  # TODO: get precision
        ]

I am seeing request from datatables client (unquoted and '&' split for convenience and readability, note column [0])

['/_editparticipants/171?draw=2',
 'columns[0][data]=',
 'columns[0][name]=',
 'columns[0][searchable]=true',
 'columns[0][orderable]=false',
 'columns[0][search][value]=',
 'columns[0][search][regex]=false',
 'columns[1][data]=place',
 'columns[1][name]=place',
 'columns[1][searchable]=true',
 'columns[1][orderable]=true',
 'columns[1][search][value]=',
 'columns[1][search][regex]=false',
 'columns[2][data]=resultname',
 'columns[2][name]=resultname',
 'columns[2][searchable]=true',
 'columns[2][orderable]=true',
 'columns[2][search][value]=',
 'columns[2][search][regex]=false',
 'columns[3][data]=gender',
 'columns[3][name]=gender',
 'columns[3][searchable]=true',
 'columns[3][orderable]=true',
 'columns[3][search][value]=',
 'columns[3][search][regex]=false',
 'columns[4][data]=age',
 'columns[4][name]=age',
 'columns[4][searchable]=true',
 'columns[4][orderable]=true',
 'columns[4][search][value]=',
 'columns[4][search][regex]=false',
 'columns[5][data]=disposition',
 'columns[5][name]=disposition',
 'columns[5][searchable]=true',
 'columns[5][orderable]=true',
 'columns[5][search][value]=',
 'columns[5][search][regex]=false',
 'columns[6][data]=membertype',
 'columns[6][name]=membertype',
 'columns[6][searchable]=true',
 'columns[6][orderable]=true',
 'columns[6][search][value]=',
 'columns[6][search][regex]=false',
 'columns[7][data]=confirm',
 'columns[7][name]=confirm',
 'columns[7][searchable]=true',
 'columns[7][orderable]=true',
 'columns[7][search][value]=',
 'columns[7][search][regex]=false',
 'columns[8][data]=runnerid',
 'columns[8][name]=runnerid',
 'columns[8][searchable]=true',
 'columns[8][orderable]=true',
 'columns[8][search][value]=',
 'columns[8][search][regex]=false',
 'columns[9][data]=hometown',
 'columns[9][name]=hometown',
 'columns[9][searchable]=true',
 'columns[9][orderable]=true',
 'columns[9][search][value]=',
 'columns[9][search][regex]=false',
 'columns[10][data]=club',
 'columns[10][name]=club',
 'columns[10][searchable]=true',
 'columns[10][orderable]=true',
 'columns[10][search][value]=',
 'columns[10][search][regex]=false',
 'columns[11][data]=time',
 'columns[11][name]=time',
 'columns[11][searchable]=true',
 'columns[11][orderable]=true',
 'columns[11][search][value]=',
 'columns[11][search][regex]=false',
 'order[0][column]=11',
 'order[0][dir]=asc',
 'start=0',
 'length=10',
 'search[value]=',
 'search[regex]=false',
 '_=1468056202626']

I see the following error

    rowTable = DataTables(request.args, ManagedResult, ManagedResult.query.filter_by(club_id=club_id,raceid=raceid), columns, dialect='mysql')
  File "C:\Users\Lou\Documents\Lou's Software\projects\rrwebapp\rrwebapp\lib\site-packages\datatables\__init__.py", line 172, in __init__
    self.run()
  File "C:\Users\Lou\Documents\Lou's Software\projects\rrwebapp\rrwebapp\lib\site-packages\datatables\__init__.py", line 226, in run
    self.sorting()
  File "C:\Users\Lou\Documents\Lou's Software\projects\rrwebapp\rrwebapp\lib\site-packages\datatables\__init__.py", line 398, in sorting
    int(self.request_values[columnOrder % i])].column_name,
IndexError: list index out of range
louking commented 8 years ago

Sorry about the noise. I see that I left out a hidden column when I was converting this view to server side. Please don't worry about this until I do some more debugging. I will close with my resolution if it's determined to be a bug on my side.

louking commented 8 years ago

again, sorry about the noise - this was just an issue in my use of sqlalchemy-datatables

thanks again for this package - very helpful