P.S. An even better approach would be to remove the dropdown

   ...requires=[IS_NULL_OR(IS_IN_DB(db, 'auth_user.id'))] # note [..]

and use an autocomplete widget to allow to search for users.


auth.settings.extra_fields['auth_user']=[Field('fullname',readable=False,writable=False,compute=lambda
 
row: "%s %s" % (row.first_name,row.last_name))]

and

db.mytable.user_id.requires=[IS_NULL_OR(IS_IN_DB(db, 'auth_user.id'))]
db.mytable.user_id.widget=SQLFORM.widgets.autocomplete(request,db.auth_user.fullname,db.auth_user.id,orderby=db.auth_user.fullname)


On Sunday, 29 July 2012 07:19:32 UTC-5, Massimo Di Pierro wrote:
>
> First of all 
>
>    form = SQLFORM.factory(db.mytable, record=db.mytable[myindex])
>
> should probably be
>
>    form = SQLFORM(db.mytable, record=db.mytable[myindex])
>
> Anyway. The slow down is due to the IS_IN_DB(db, 'auth_user.id') 
> validator. Every time you display the form, it will create a new dropdown 
> list with all your users. You may want to cache this:
>
>
> Field('user_id', db.auth_user,
>         requires=IS_NULL_OR(IS_IN_DB(db, 'auth_user.id
> ',cache=(cache.ram,3600))),
>         ),
>
> 3600 means the list will be re-built every hour.
>
> On Sunday, 29 July 2012 04:53:25 UTC-5, weheh wrote:
>>
>> I've got an SQLFORM.factory inside a model. Very standard stuff:
>>
>> form = SQLFORM.factory(db.mytable, record=db.mytable[myindex])
>>
>> The problem is, as I insert users into db.auth_user, the above 
>> SQLFORM.factory statement takes longer and longer to execute. It begins by 
>> executing in 0.05 seconds when there are only 3 rows in db.auth_user. 
>> However, when db.auth_user grows to 10,000 rows, it takes 11.4 seconds to 
>> do the above assignment. At 100,000 rows it takes over 2 minutes.
>>
>> Any ideas where the trouble is? The db.mytable does have a user_id field 
>> that references auth_user:
>>
>>     Field('user_id', db.auth_user,
>>         requires=IS_NULL_OR(IS_IN_DB(db, 'auth_user.id')),
>>         ),
>>
>> but I don't see how this could affect anything. This is a showstopper for 
>> me, so any help would be appreciated. Thanks.
>>
>

-- 



Reply via email to