I agree -- this is certainly not obvious (had to look at the code to figure 
out what was going on).

Anthony

On Sunday, April 7, 2013 8:55:15 PM UTC-4, Jason Phillips wrote:
>
> Thank you so much, that solved it. 
>
> (It might be helpful to others if that important caveat makes it into the 
> relevant 
> section of 
> documentation<http://www.web2py.com/books/default/chapter/29/09#Renaming-Auth-tables>
>  at 
> some point, though I know that not every detail can be explained succinctly 
> there.)
>
>
> On Sunday, April 7, 2013 7:29:00 PM UTC-5, Anthony wrote:
>>
>> Looks like by default, auth.signature gets defined when Auth is 
>> initialized, which is before you have set the custom table names. To avoid 
>> this do:
>>
>> auth = Auth(db, signature=False)
>>
>> In that case, auth.signature will instead be defined when you call 
>> auth.define_tables(), by which point the custom tables names will already 
>> be set.
>>
>> Anthony
>>
>> On Sunday, April 7, 2013 6:58:09 PM UTC-4, Jason Phillips wrote:
>>>
>>> When I follow what I thought to be standard practice (following this 
>>> documentation<http://www.web2py.com/books/default/chapter/29/09#Renaming-Auth-tables>)
>>>  
>>> for using alternative names for the auth tables, I'm seeing an incorrect 
>>> foreign key reference on any subsequent table defined that uses 
>>> auth.signature.
>>>
>>> Here's the basic test code in a db.py:
>>>
>>> auth = Auth(db)
>>>
>>> auth.settings.table_user_name = 'cst_user'
>>> auth.settings.table_group_name = 'cst_group'
>>> auth.settings.table_membership_name = 'cst_membership'
>>> auth.settings.table_permission_name = 'cst_permission'
>>> auth.settings.table_event_name = 'cst_event'
>>> auth.settings.table_cas_name = 'cst_cas'
>>>
>>> auth.define_tables(username=True,signature=False)
>>>
>>> db.define_table('tmp_mytable',
>>>   Field('something'),
>>>   auth.signature)
>>>
>>>
>>>
>>> This works so far as the auth tables are concerned; web2py creates them 
>>> with the alternate names specified, properly referencing each other. 
>>>
>>> However, the query generated to create the subsequent table that uses 
>>> auth.signature (*tmp_mytable* above) refers in its foreign key 
>>> declaration to the standard auth table names instead. The query below was 
>>> generated (using SQLITE to test, though I first encountered this with 
>>> Oracle).
>>>
>>>
>>> CREATE TABLE mytable(
>>>     id INTEGER PRIMARY KEY AUTOINCREMENT,
>>>     something CHAR(512),
>>>     is_active CHAR(1),
>>>     created_on TIMESTAMP,
>>>     created_by INTEGER REFERENCES auth_user (id) ON DELETE CASCADE,
>>>     modified_on TIMESTAMP,
>>>     modified_by INTEGER REFERENCES auth_user (id) ON DELETE CASCADE
>>> );
>>>
>>> Note that it has reverted to the default name "auth_user" for the 
>>> referenced foreign keys. What am I doing wrong here? 
>>>
>>> (Version 2.4.5-stable+timestamp.2013.04.06.10.09.56)
>>>
>>

-- 

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