How to create table during Django tests with managed = False

前端 未结 9 1942
执笔经年
执笔经年 2020-12-24 12:25

I have a model with managed = False.

class SampleModel(models.Model):
    apple = models.CharField(max_length=30)
    orange = models.CharField(max_length=3         


        
9条回答
  •  忘掉有多难
    2020-12-24 13:08

    Just to add :django.db.models.loading.get_models will be removed in Django 1.9 (see https://github.com/BertrandBordage/django-cachalot/issues/33).

    Below is an updated one for Django 1.10:

    class UnManagedModelTestRunner(DiscoverRunner):
        '''
        Test runner that automatically makes all unmanaged models in your Django
        project managed for the duration of the test run.
        Many thanks to the Caktus Group 
        '''
    
        def setup_test_environment(self, *args, **kwargs):
            from django.apps  import apps
            self.unmanaged_models = [m for m in apps.get_models() if not m._meta.managed]
            for m in self.unmanaged_models:
                m._meta.managed = True
            super(UnManagedModelTestRunner, self).setup_test_environment(*args, **kwargs)
    
        def teardown_test_environment(self, *args, **kwargs):
            super(UnManagedModelTestRunner, self).teardown_test_environment(*args, **kwargs)
            # reset unmanaged models
            for m in self.unmanaged_models:
                m._meta.managed = False 
    

    Note you also need to take care migrations(see Testing django application with several legacy databases)

    MIGRATION_MODULES = {
        'news': 'news.test_migrations',
        'economist': 'economist.test_migrations'
    }
    

提交回复
热议问题