Yes! Thanks Anthony, indeed by simply putting

 requires=[IS_IN_DB(db, 't_codespostaux.id')])

in the Field definition the problem is solved.

Thus, the indexing of the field is not a necessary condition, however I 
will do it also to be sure to have all the performance gains possible.

Cheers,
Jota Pin

Le lundi 17 décembre 2018 13:18:12 UTC+1, Jota Pin a écrit :
>
> Thanks for answering,
>
> - The process crashes indeed when addresses_manage is loaded (in fact the 
> browser itself freezes waiting a bit, then after +-30 sec the web2py 
> process crashes).
>
>  - About "f_representationfield", db.t_codespostaux is a table with four 
> columns: f_postcode|f_city|f_country|f_representationfield, where 
> f_representationfield contains (concatenated) postcode+city+country. Reason 
> for that column: the table was imported with the 3 first columns, then 
> since there might be identical postcodes for two countries, people should 
> directly see and select postcode+city+country when encoding an addresses, 
> and I thought that avoiding having the concatenation made by web2py could 
> improve the performance.
>
> - Indeed I did not indexed that field, good point it cannot hurt, I will 
> try it and come back here with the result, but I had not tried that before 
> since performing the SQL directly on the sqlite db was rather quick.
>
> - Your hypothesis that the problem might come from the widget seems likely 
> to be true to me, I will try it now and report here the result.
>
> All the best,
> Jota Pin
>
>
>
>
> Le samedi 15 décembre 2018 02:19:48 UTC+1, Anthony a écrit :
>>
>> What is db.t_codespostaux.f_representationfield (it's not in your model), 
>> and most importantly, have you created a database index on that field (will 
>> help with the autocomplete search)?
>>
>> Exactly at what point does the process crash -- as soon as you load the 
>> addresses_manage page? If so, I suspect the problem might be the grid 
>> search widget, which by default will attempt to generate all the options 
>> for reference fields. To avoid that, I think it will work to manually 
>> create the reference field validator and put it in a list:
>>
>>     Field('f_codepostal', 'reference t_codespostaux',
>>           requires=[IS_IN_DB(db, 't_codespostaux.id')])
>>
>> That will also suppress the default select widget in forms, even if you 
>> don't explicitly specify the autocomplete widget as you have.
>>
>> Anthony
>>
>> On Friday, December 14, 2018 at 6:58:42 PM UTC-5, Jota Pin wrote:
>>>
>>> Dear all,
>>>
>>>
>>> [I posted my first message some days ago and did not saw it appearing on 
>>> the list, so I re-post, sorry]
>>>
>>>
>>> I am developing a small-scale app, basically for +-15 users with tables 
>>> around 1000-10000 lines, except for one: post-codes (500000). The app works 
>>> fine with up to ~5000 postcodes, but with the real table, it simply crashes 
>>> the web2py process. Being small-scale, I suppose that using the "defaults" 
>>> is enough (the embedded rocket server, ubuntu 16.04, sqlite). Is there a 
>>> simple solution by modifying the model/controller, or is this about 
>>> switching to nginx?
>>>
>>>
>>> A) The model: (for the two concerned tables, simplified to not flooding 
>>> you with details, "codespostaux" are the post-codes):
>>>
>>> db.define_table('t_adresses',
>>>     Field('f_codepostal', type='reference t_codespostaux', notnull=True,
>>>     label=T('Codepostal')),
>>>     migrate=settings.migrate)
>>> db.t_adresses.f_codepostal.widget = 
>>> SQLFORM.widgets.autocomplete(request, 
>>> db.t_codespostaux.f_representationfield, 
>>> id_field=db.t_codespostaux.id,limitby=(0,10), 
>>> min_length=2)
>>>
>>> db.define_table('t_adresses_archive',db.t_adresses,Field('current_record','reference
>>>  
>>> t_adresses',readable=False,writable=False))
>>>
>>> db.define_table('t_codespostaux',               
>>>     Field('f_codepostal', type='string',
>>>           label=T('Codepostal'),
>>>     format='%(f_codepostal)s',                
>>>     migrate=settings.migrate)
>>>
>>> db.define_table('t_codespostaux_archive',db.t_codespostaux,Field('current_record','reference
>>>  
>>> t_codespostaux',readable=False,writable=False))
>>>
>>> B) The Controller:
>>> def adresses_manage():
>>>     form = 
>>> SQLFORM.smartgrid(db.t_adresses,onupdate=auth.archive,csv=False)
>>>     return locals()
>>>
>>>
>>>
>>> Best regards,
>>>
>>> Jota
>>>
>>

-- 
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 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/d/optout.

Reply via email to