Given the field definition:

Field('company_name', 'reference company', notnull=True)

and the fact that the db.company table has a "format" attribute, you will 
get a default "represent" attribute for the db.project.company_name field 
that displays the company name rather than its record ID. However, the 
represent attribute is used only in SQLTABLE, SQLFORM.grid, and read-only 
SQLFORM fields, not anywhere you happen to display the value of the field. 
So, you have to be explicit:

{{# Explicitly pass the value to the field's "represent" function.}}
{{=db.project.company_name.represent(item[3])}} 

or

{{# Query the db.company table for the item[3] record and extract the 
company_name field.}}
{{=db.company(item[3]).company_name}}

In trunk, there is also now a new method that would work if you had a Rows 
object instead of using executesql:

def_index:
    items = db().select(db.project.company_name)
    return locals()

{{for item in items.render():}}
{{=item.company_name}}
{{pass}}

items.render() returns an iterable that generates a copy of each Row object 
with each field transformed by its "represent" attribute. You can also 
extract just a specific Row:

items.render(0)

As an aside, it would be more common to name the db.project.company_name 
field either just db.project.company or db.project.company_id. It is 
misleading to name it db.project.company_name, as it doesn't actually store 
the name (it is merely represented by the name in some display contexts).

Finally, any reason for using executesql rather than a DAL select?

Anthony

On Saturday, August 31, 2013 11:28:40 PM UTC-7, אבי אברמוביץ wrote:
>
> index.html:
> {{extend 'layout.html'}}
> <h2>All projects:</h2>
> <br/>
> {{for item in items: }}
> {{=item[3]}}
> {{pass}}
>
> def_index:
> items = db.executesql('SELECT * FROM project;')
> return locals()
>
> model:
>
> db.define_table('company',
>     Field('company_name', notnull=True, unique=True),
>     Field('email'),
>     Field('phone', notnull=True),
>     Field('url'),
>     format = '%(company_name)s')
> db.company.email.requires=IS_EMAIL()
> db.company.url.requires=IS_EMPTY_OR(IS_URL())
>
> db.define_table('project',
>     Field('name', notnull=True),
>     Field('employee_name', db.auth_user,
> default=auth.user_id),
>     Field('company_name', 'reference company', notnull=True),
>     Field('description', 'text', notnull=True),
>     Field('start_date', 'date', notnull=True),
>     Field('due_date', 'date', notnull=True),
>     Field('completed', 'boolean', notnull=True),
>     format = '%(company_name)s')
> db.project.employee_name.readable = True
> db.project.employee_name.writable = False
> db.project.start_date.requires = IS_DATE(format=T('%m-%d-%Y'), 
> error_message='Must be MM-DD-YYYY!')
> db.project.due_date.requires = IS_DATE(format=T('%m-%d-%Y'), 
> error_message='Must be MM-DD-YYYY!')
>
>
>
>
>
>
>
>
> On Sunday, September 1, 2013 2:56:47 AM UTC+3, Massimo Di Pierro wrote:
>>
>> I need to see more code.
>>
>> On Saturday, 31 August 2013 16:25:32 UTC-5, אבי אברמוביץ wrote:
>>>
>>> Hi,
>>> I do this query:
>>> items = db.executesql('SELECT * FROM project;')
>>> For the field below, which is a field in the db.project:
>>> Field('company_name', 'reference company', notnull=True).
>>> On the view, "{{=item[3]}}" renders only '1'.(instead of the company 
>>> name).
>>> What should I do?
>>> Thanks.
>>>
>>

-- 

--- 
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