Changeset 8

Show
Ignore:
Timestamp:
01/30/07 16:44:57 (6 years ago)
Author:
cleverdevil
Message:

Added support for specifying the table name for the mapping table on many to
many relationships by passing a 'table_name' keyword argument.

We still need to figure out what to do when the user fails to specify the
table name on one side of the relationship, or specifies different table
names.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • supermodel/trunk/supermodel/relationships.py

    r7 r8  
    236236 
    237237class HasAndBelongsToMany(Relationship): 
     238     
     239    def __init__(self, entity, name, *args, **kwargs): 
     240        self.tablename = kwargs.pop('table_name', None) 
     241        super(HasAndBelongsToMany, self).__init__(entity, name, *args, **kwargs) 
     242     
    238243    def create_tables(self): 
    239244        if self.inverse: 
     
    297302            # (instead of the inverse relation's name) so that a many-to-many 
    298303            # relation can be defined without inverse. 
    299             e2_pk_name = '_'.join([key.column.name for key in 
    300                                    e2_desc.primary_keys]) 
    301             tablename = "%s_%s__%s_%s" % (e1_desc.tablename, self.name, 
    302                                           e2_desc.tablename, e2_pk_name) 
     304            if not self.tablename: 
     305                e2_pk_name = '_'.join([key.column.name for key in 
     306                                       e2_desc.primary_keys]) 
     307                tablename = "%s_%s__%s_%s" % (e1_desc.tablename, self.name, 
     308                                              e2_desc.tablename, e2_pk_name) 
     309            else: 
     310                tablename = self.tablename 
    303311 
    304312            args = columns + constraints