Ok, first I tried to make a dictionary:

    links = {
        'db.person':[lambda row: 
A(T('Delete'),_href=URL("configure","delete",args=["delete", 'db.person', 
row.id]))],
        'db.product':[lambda row: 
A(T('Delete'),_href=URL("configure","delete",args=["delete", 'db.product', 
row.id]))],
        'db.purchase':[lambda row: 
A(T('Delete'),_href=URL("configure","delete",args=["delete", 'db.purchase', 
row.id]))]
    }

But I could not figure out the links=? argument for SQLFORM.smartgrid.

I've been printing the request.args on each pages, so I tried to hardcode 
based on argument numbers:

    # request.args(3) == 'purchase.product_id'
    if not request.args(3) == None:
        links=[lambda row: 
A(T('Delete'),_href=URL("configure","delete",args=["delete", 'db.purchase', 
row.id]))]
    # request.args(1) == 'product.seller_id'
    elif not request.args(1) == None:
        links=[lambda row: 
A(T('Delete'),_href=URL("configure","delete",args=["delete", 'db.product', 
row.id]))]
    else:
    # request.args(0) == 'person'
        links=[lambda row: 
A(T('Delete'),_href=URL("configure","delete",args=["delete", 'db.person', 
row.id]))]
    grid = SQLFORM.smartgrid(db.person,linked_tables=['product','purchase'],
                             user_signature=False, deletable=False, 
csv=False, links=links)

This works!  And I get the necessary information to process the delete in 
the proper table
after display/confirmation in configure/delete.

However, this solution feels like I'm one step away from a real answer.  Is 
there a better
way to determine how to pass to links=?

Thanks for all your help!
Kris


On Friday, November 1, 2013 8:26:40 AM UTC-6, Massimo Di Pierro wrote:
>
> links = {'tablename':[lambda row: 
> A(T('Delete'),_href=URL("configure","delete",args=["delete", 'tablename', 
> row.id]))]}
>
> You can have one item for each tablename,
>
> On Friday, 1 November 2013 09:02:06 UTC-5, kw...@teradactyl.com wrote:
>>
>> I have a smartgrid example with delete button removed and a links=links 
>> dictionary for delete:  
>>
>>     links=[lambda row: 
>> A(T('Delete'),_href=URL("configure","delete",args=["delete", db.person, 
>> row.id]))]
>>
>> For children in the smartgrid, the delete URL request args remains the 
>> parent table name (db.person in this example).
>> Is there a way to form links= such that the children will have their 
>> table name attached to the URL
>> (so I delete the child and not the parent)? 
>>
>> I found a horrible way to do this by placing the tablename inside the 
>> db.py definition to pass to the delete URL
>>
>>     links=[lambda row: 
>> A(T('Delete'),_href=URL("configure","delete",args=["delete", row.tablename, 
>> row.id]))]
>>
>> but this was just an exercise and prone to way to many problems...
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to