def handle(self, *args, **options):
        ops = []

        for model in apps.get_models(include_auto_created=True):
            if not hasattr(model, 'VersionModel') or model._meta.proxy:
                continue
            ops.extend(self.build_operations(model))
        if options['initial']:
            m = Migration('0003_triggers', 'share')
            m.dependencies = [('share', '0002_create_share_user')]
        else:
            ml = MigrationLoader(connection=connection)
            ml.build_graph()
            last_share_migration = [
                x[1] for x in ml.graph.leaf_nodes() if x[0] == 'share'
            ][0]
            next_number = '{0:04d}'.format(int(last_share_migration[0:4]) + 1)
            m = Migration(
                '{}_update_trigger_migrations_{}'.format(
                    next_number,
                    datetime.datetime.now().strftime("%Y%m%d_%H%M")), 'share')
            m.dependencies = [('share', '0002_create_share_user'),
                              ('share', last_share_migration)]
        m.operations = ops
        self.write_migration(m)
Esempio n. 2
0
    def _get_delete_model_migration(self, dependencies=[]):
        database_operations = []
        state_operations = []

        state_operations.append(migrations.DeleteModel(name=self.model_name))

        migration = Migration('delete_model', self.source_app)
        migration.dependencies = dependencies
        migration.operations = [
            migrations.SeparateDatabaseAndState(
                database_operations=database_operations,
                state_operations=state_operations,
            )
        ]
        return migration
Esempio n. 3
0
    def _get_rename_table_migration(self, dependencies=[]):
        database_operations = []
        state_operations = []

        database_operations.append(
            migrations.AlterModelTable(
                self.model_name.lower(),
                '{}_{}'.format(self.dest_app, self.model_name.lower())))

        migration = Migration('rename_table', self.source_app)
        migration.dependencies = dependencies
        migration.operations = [
            migrations.SeparateDatabaseAndState(
                database_operations=database_operations,
                state_operations=state_operations)
        ]
        return migration
Esempio n. 4
0
    def _get_create_model_migration(self, dependencies=[]):
        database_operations = []
        state_operations = []

        model_state = self.to_state.models[self.dest_app,
                                           self.model_name.lower()]
        model_opts = self.to_state.apps.get_model(self.dest_app,
                                                  self.model_name)._meta
        related_fields = {}
        for field in model_opts.local_fields:
            if field.remote_field:
                if field.remote_field.model:
                    if not field.remote_field.parent_link:
                        related_fields[field.name] = field
                if (getattr(field.remote_field, 'through', None)
                        and not field.remote_field.through._meta.auto_created):
                    related_fields[field.name] = field
        for field in model_opts.local_many_to_many:
            if field.remote_field.model:
                related_fields[field.name] = field
            if getattr(field.remote_field, 'through', None
                       ) and not field.remote_field.through._meta.auto_created:
                related_fields[field.name] = field

        state_operations.append(
            migrations.CreateModel(
                name=model_state.name,
                fields=[
                    d for d in model_state.fields if d[0] not in related_fields
                ],
                options=model_state.options,
                bases=model_state.bases,
                managers=model_state.managers,
            ))

        migration = Migration('create_model', self.dest_app)
        migration.dependencies = dependencies
        migration.operations = [
            migrations.SeparateDatabaseAndState(
                database_operations=database_operations,
                state_operations=state_operations,
            )
        ]
        return migration
    def handle(self, *args, **options):
        ops = []

        for model in apps.get_models(include_auto_created=True):
            if not hasattr(model, 'VersionModel') or model._meta.proxy:
                continue
            ops.extend(self.build_operations(model))
        if options['initial']:
            m = Migration('0003_triggers', 'share')
            m.dependencies = [('share', '0002_create_share_user')]
        else:
            ml = MigrationLoader(connection=connection)
            ml.build_graph()
            last_share_migration = [x[1] for x in ml.graph.leaf_nodes() if x[0] == 'share'][0]
            next_number = '{0:04d}'.format(int(last_share_migration[0:4]) + 1)
            m = Migration('{}_update_trigger_migrations_{}'.format(next_number, datetime.datetime.now().strftime("%Y%m%d_%H%M")), 'share')
            m.dependencies = [('share', '0002_create_share_user'), ('share', last_share_migration)]
        m.operations = ops
        self.write_migration(m)
Esempio n. 6
0
    def _get_model_fk_migrations(self, dependencies=[]):
        _migrations = []

        model_opts = self.to_state.apps.get_model(self.dest_app,
                                                  self.model_name)._meta

        for field in model_opts.get_fields(include_hidden=True):
            if field.is_relation:
                operations = []
                operations.append(
                    migrations.AlterField(
                        model_name=field.related_model._meta.model_name,
                        name=field.remote_field.name,
                        field=field.remote_field,
                    ))
                migration = Migration('alter_model_fk',
                                      field.related_model._meta.app_label)
                migration.dependencies = dependencies
                migration.operations = operations

                _migrations.append(migration)

        return _migrations