Just a little fix, Anthony...

Venture.logr_type.represent = lambda id, r: db.logr_type[id].name if
db.logr_type[id] else ""

Because otherwise an error occurs when viewing or editing the registry. The
NoneType has no attribute "name".

Thanks again!



On Sat, Jan 26, 2013 at 1:56 PM, __pyslan__ - Ayslan Jenken <
[email protected]> wrote:

> Anthony, work fine, man!
>
> Reading the web2py book I realized that the problem was in requires and
> not in required, but had not understood well what he expects. Now yes! I
> also didn't know about the argument _represent!
>
> Thank you very much, man!
>
>
>
> On Sat, Jan 26, 2013 at 1:31 PM, Anthony <[email protected]> wrote:
>
>> I assume you're getting an error message on the form itself, which
>> indicates the problem is with the default validator, not the notnull
>> attribute (the latter is set in the database and results in a database
>> error, which results in web2py returning a 500 server error response if not
>> otherwise trapped). By default, your reference field gets this validator:
>>
>> IS_IN_DB(db, 'logr_type.id', db.logr_type._format)
>>
>> That gives you the dropdown list in the form but also requires that a
>> selection be made. To enable the dropdown but not require a selection, you
>> can do:
>>
>>     Field('logr_type', 'reference logr_type', notnull=False, label=T('Logr
>> Type'),
>>         requires=IS_EMPTY_OR(IS_IN_DB(db, 'logr_type.id', '%(name)s')),
>>         represent=lambda id, r: db.logr_type[id].name)
>>
>> Note, that code also explicitly sets the "represent" attribute of the
>> field. The reason is that when you explicitly set the "requires" attribute
>> of a reference field, the default "represent" attribute is no longer set
>> automatically.
>>
>> Anthony
>>
>>
>> On Saturday, January 26, 2013 7:04:24 AM UTC-5, __pyslan__ wrote:
>>>
>>> My models:
>>>
>>> LogrType = db.define_table('logr_type',
>>>     Field('name', notnull=False, label=T("Name")),
>>>     format='%(name)s'
>>> )
>>>
>>> Venture = db.define_table('venture',
>>>     Field('venture_type', 'reference venture_type', notnull=True,
>>> label=T("Type")),
>>>     Field('venture_situation', 'reference venture_situation',
>>> notnull=True, default=1, label=T("Situation")),
>>>     Field('name', notnull=True, label=T("Name")),
>>>     Field('logr_type', 'reference logr_type', notnull=False,
>>> label=T('Logr Type')),
>>>     Field('logr', notnull=False, label=T('Logradouro')),
>>>     Field('logr_number', notnull=False, label=T('Number')),
>>>     Field('logr_compl', notnull=False, label=T('Complement')),
>>>     Field('logr_neigh', notnull=False, label=T('Neighborhood')),
>>>     Field('logr_city', notnull=False, label=T('City')),
>>>     Field('logr_state', notnull=False, label=T('State')),
>>>     Field('logr_zip_code', notnull=False, label=T('Zip Code'),
>>> default=""),
>>>     format='%(name)s'
>>> )
>>>
>>>
>>> When I add, or edit a venture, the logr_type is required...and should
>>> not be..
>>>
>>>
>>> Thanks...
>>>
>>> __pyslan__
>>>
>>>  --
>>
>>
>>
>>
>
>

-- 



Reply via email to