Hi Anthony, now I get the right rows.
One problem solved, two other problems appeared.

*1st step:*

I will go back to the parent-children-example of the book. I substituted parent
by auth_user:
My model:

db.define_table('child',
    Field('name'),
    Field('parent','reference auth_user'),
    )

My first function:

def f1():
    query=db.auth_user.id>0
    form = SQLFORM.smartgrid(
        db.auth_user,
        fields=[db.auth_user.id, db.auth_user.first_name,
          db.auth_user.last_name,
          db.child.name, db.child.id],
        constraints=dict(auth_user=query),
        linked_tables=['child'],
        user_signature=False,
        )
    return locals()

The result: a nice grid, like
Id<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user?keywords=&order=auth_user.id>
First
name<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user?keywords=&order=auth_user.first_name>Last
name<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user?keywords=&order=auth_user.last_name>
1MartinMChildren<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/child.parent/1>
View<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/view/auth_user/1>
Edit<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/edit/auth_user/1>
Delete <http://127.0.0.1:8000/smartgridtest/default/f1#null>
2MariaMChildren<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/child.parent/2>
View<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/view/auth_user/2>
Edit<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/edit/auth_user/2>
Delete <http://127.0.0.1:8000/smartgridtest/default/f1#null>
3ErichMChildren<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/child.parent/3>
View<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/view/auth_user/3>
Edit<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/edit/auth_user/3>
Delete <http://127.0.0.1:8000/smartgridtest/default/f1#null>
Every button is clickable, I can see the children - everything works as
expected.

*2nd step:*

A new query, everything else is unchanged.

    query=(db.auth_user.id == db.auth_membership.user_id) &
       (db.auth_membership.group_id == 1)

By the way, this would not work without the field-argument.
Martin and Erich are members of the group 1, "father"s. They are selected
correctly:

Id<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user?keywords=&order=auth_user.id>First
name<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user?keywords=&order=auth_user.first_name>
Last
name<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user?keywords=&order=auth_user.last_name>
3ErichMChildren<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/child.parent/3>
View<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/view/auth_user/3>
Edit<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/edit/auth_user/3>
Delete <http://127.0.0.1:8000/smartgridtest/default/f1#null> 1MartinM
Children<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/child.parent/1>
View<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/view/auth_user/1>
Edit<http://127.0.0.1:8000/smartgridtest/default/f1/auth_user/edit/auth_user/1>
Delete <http://127.0.0.1:8000/smartgridtest/default/f1#null>
*But now it is impossible to have a look at the children. *
A click on "Children" calls the function .../f1/auth_user/child.parent/1.
The screen blinks once and the same picture appears again.* The button
"Children" does not work,* no table of the children!

*3rd step:*

Let's introduce a new table:

db.define_table('message',
    Field('text'),
    Field('sender', 'reference auth_user'),
    Field('receiver', 'reference auth_user'),
    )

And with a simple function ...

def f3():
    form = SQLFORM.smartgrid(
        db.auth_user,
        fields=[db.auth_user.first_name, db.auth_user.last_name],
        linked_tables=['message'],
        user_signature=False,
        )
    return dict(form=form)

.. this grid appears:

First 
name<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user?keywords=&order=auth_user.first_name>Last
name<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user?keywords=&order=auth_user.last_name>
MartinMMessages<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/message.sender/1>
Messages<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/message.receiver/1>
View<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/view/auth_user/1>
Edit<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/edit/auth_user/1>
Delete <http://127.0.0.1:8000/smartgridtest/default/f3#null>
MariaMMessages<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/message.sender/2>
Messages<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/message.receiver/2>
View<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/view/auth_user/2>
Edit<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/edit/auth_user/2>
Delete <http://127.0.0.1:8000/smartgridtest/default/f3#null>
ErichMMessages<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/message.sender/3>
Messages<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/message.receiver/3>
View<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/view/auth_user/3>
Edit<http://127.0.0.1:8000/smartgridtest/default/f3/auth_user/edit/auth_user/3>
Delete <http://127.0.0.1:8000/smartgridtest/default/f3#null>
But: "Messages" appear twice, one for message.sender, one for
message.receiver

*My questions:
*
*(1) Is it possible to suppress one button?
(2) Or is possible to rename one button?
*

I have found a solution:

db.define_table('message',
    Field('text'),
    Field('sender', 'reference auth_user'),
    Field('receiver', 'integer', *requires=IS_IN_DB(db.auth_user)*),
    )

But I think this is not very beautiful...

Regards, Martin

Reply via email to