DAL Join

52 views
Skip to first unread message

contact.ur...@gmail.com

unread,
Feb 20, 2014, 12:18:33 AM2/20/14
to web...@googlegroups.com
Hi,
Maybe a stupid question but here goes.

I am trying to do the following join.

row = db(db.weets.posted_by==user).select(join=db.auth_user.on(db.weets.posted_by==db.auth_user.id))

its seems to work and row does return.
The example in the book then shows you can use attributes but when i try:
 
row.auth_user.name

or other field it says no attribute auth_user.

i am not sure why this is?

Massimo Di Pierro

unread,
Feb 20, 2014, 1:15:16 AM2/20/14
to web...@googlegroups.com
Should be

rows = db(db.weets.posted_by==user).select(join=db.auth_user.on(db.weets.posted_by==db.auth_user.id))
row = rows.first()

Does it work?

Also try (should be the same):

rows = db(db.weets.posted_by==user)(db.weets.posted_by==db.auth_user.id).select()
row = rows.first()

Anthony

unread,
Feb 20, 2014, 1:19:25 AM2/20/14
to
A select always returns a Rows object, not a Row object, even if there is only one record. So, instead, do:

row = db(db.weets.posted_by == user).select(
   
join=db.auth_user.on(db.weets.posted_by == db.auth_user.id)).first()

Anthony

contact.ur...@gmail.com

unread,
Feb 20, 2014, 1:59:37 AM2/20/14
to web...@googlegroups.com
I tried both suggestions by yourself and the suggestion by Anthony.

They all return a dictionary as before but my i am still getting the attribute error.

may be it is something i am doing ?

Here is the error output if it helps

Traceback (most recent call last):
File "/home/www-data/web2py/gluon/restricted.py", line 217, in restricted
exec ccode in environment
File "/home/www-data/web2py/applications/init/controllers/api.py", line 124, in <module>
File "/home/www-data/web2py/gluon/globals.py", line 372, in <lambda>
self._caller = lambda f: f()
File "/home/www-data/web2py/applications/init/controllers/api.py", line 8, in call
return service()
File "/home/www-data/web2py/gluon/tools.py", line 4915, in __call__
return self.serve_json(request.args[1:])
File "/home/www-data/web2py/gluon/tools.py", line 4603, in serve_json
s = universal_caller(self.json_procedures[args[0]], *args[1:], **d)
File "/home/www-data/web2py/gluon/tools.py", line 4274, in universal_caller
return f(**arg_dict)
File "/home/www-data/web2py/applications/init/controllers/api.py", line 117, in news
company = row.auth_user.company_name
AttributeError: 'NoneType' object has no attribute 'auth_user'

Anthony

unread,
Feb 20, 2014, 7:35:19 AM2/20/14
to web...@googlegroups.com
Looks like your query simply isn't returning any results.

Anthony

Urban Gatherer

unread,
Feb 20, 2014, 11:19:34 AM2/20/14
to web...@googlegroups.com
Thank you, it turned out to be a problem in my loop. one query returned null. As you said


On Thu, Feb 20, 2014 at 4:35 AM, Anthony <abas...@gmail.com> wrote:
Looks like your query simply isn't returning any results.

Anthony

--
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 a topic in the Google Groups "web2py-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/web2py/sZa1Jhruzao/unsubscribe.
To unsubscribe from this group and all its topics, send an email to web2py+un...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply all
Reply to author
Forward
0 new messages