Good point -- I was thinking of the case when the field is required, which 
is the usual default.

Anthony

On Saturday, January 26, 2013 12:55:58 PM UTC-5, __pyslan__ wrote:
>
> 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] <javascript:>> 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] <javascript:>
>> > 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