Django

Code

Changeset 3266

Show
Ignore:
Timestamp:
07/03/06 15:56:24 (2 years ago)
Author:
jpellerin
Message:

[multi-db] Added install() and other schema manipulation methods to Manager. Fixed bug in manager assignment for inherited classes (objects and _default_manager in child class were still those belonging to parent class).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/multiple-db-support/django/db/models/manager.py

    r3228 r3266  
    2121            pass 
    2222        cls.add_to_class('objects', Manager()) 
    23  
     23    elif cls._default_manager.model != cls: 
     24        # cls is an inherited model; don't want the parent manager 
     25        cls.add_to_class('objects', Manager()) 
    2426dispatcher.connect(ensure_default_manager, signal=signals.class_prepared) 
    2527 
     
    3941        self.model = model 
    4042        setattr(model, name, ManagerDescriptor(self)) 
    41         if not hasattr(model, '_default_manager') or self.creation_counter < model._default_manager.creation_counter: 
     43        if not hasattr(model, '_default_manager') \ 
     44            or self.creation_counter < model._default_manager.creation_counter \ 
     45            or model._default_manager.model != model: 
    4246            model._default_manager = self 
    4347 
     
    103107        return self.get_query_set().values(*args, **kwargs) 
    104108 
     109    ####################### 
     110    # SCHEMA MANIPULATION # 
     111    ####################### 
     112 
     113    def install(self, initial_data=False): 
     114        """Install my model's table, indexes and (if requested) initial data. 
     115 
     116        Returns a 2-tuple of the lists of statements executed and 
     117        statements pending. Pending statements are those that could 
     118        not yet be executed, such as foreign key constraints for 
     119        tables that don't exist at install time. 
     120        """ 
     121        creator = self.model._meta.connection_info.get_creation_module() 
     122        run, pending = creator.builder.get_create_table(self.model) 
     123        run += creator.builder.get_create_indexes(self.model) 
     124        pending += creator.builder.get_create_many_to_many(self.model) 
     125        if initial_data: 
     126            run += creator.builder.get_initialdata(self.model) 
     127 
     128        for statement in run: 
     129            statement.execute() 
     130        return pending 
     131 
     132    def load_initial_data(self): 
     133        """Load initial data for my model into the database.""" 
     134        pass # FIXME 
     135 
     136    def drop(self): 
     137        """Drop my model's table.""" 
     138        pass # FIXME 
     139 
     140     
    105141class ManagerDescriptor(object): 
    106142    # This class ensures managers aren't accessible via model instances.