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