I don't understand what you are trying to achieve, but whatever it is, you 
are doing it wrong; your model should be:

db.define_table('A', Field('name'))

db.define_table('B', Field('name'), Field('id_from_table_a', 'reference A'))
# alternatively:
# db.define_table('B', Field('name'), Field('id_from_table_a', db.A)) 

This would create the foreign key reference, and would allow nulls by 
default (which is what your condition does).

But as I said, I'm not sure exactly what you are trying to achieve?

On Wednesday, April 18, 2012 7:11:42 PM UTC-4, Cliff wrote:
>
> There are two tables, as follows:
>
> db.define_table('A', Field('name'))
>
> db.define_table('B', Field('name'), Field('id_from_table_a))
>
> Also there are two applications.  One, called 'both_a_and_b', uses both 
> tables and uses 'table_a_id'  as a foreign key in table B.  The other, 
> called 'table_b_only' needs CRUD access to the information in table B, but 
> it is not able to supply a value for 'id_from_table_a.'
>
> I think because Postgres recognizes foreign key constraints, 
> 'table_b_only' will not be able to create records in table B.  
>
> What Is the right solution?
>
> I can think of two.  First, create a third table, C, for all the data that 
> 'table_b_only' needs.  This table would not have the 'id_from_table_a' 
> field.  The other application would need to write also to this table 
> whenever it creates a record in table B.
>
> A second possibility might be to define table B this way:
> db.define_table('B', 
>   Field('name') , 
>   Field('id_from_table_a', requires= IS_EMPTY_OR(IS_IN_DB(db, 'A.id', 
> ...)))
> )
>
> I would be grateful for any guidance,
> Cliff Kachinske
>

Reply via email to