1

Из oficial documentation:Как создать таблицу во время тестов Django с помощью managed = False?

Для испытаний с участием моделей с managed=False, это до вас, чтобы обеспечить правильные таблицы создаются в рамках испытательной установки.

Я не знаю, как создавать таблицы как часть тестовой настройки. Я нашел это question, и принятый ответ не работает для меня. Я думаю, это связано с тем, что файлы миграции. Конфигурация находится в файлах миграции, чтобы изменить значения «на лету», не имеет никакого эффекта.

Какой способ решить эту проблему в Django 1.7+?

ответ

0

Я нашел способ экземпляра класса. Измените светильники и добавьте SQL для создания таблиц:

#0001_initial.py (or followings) 
class Migration(migrations.Migration): 

    operations = [ 
     migrations.RunSQL("CREATE TABLE..."), 
     ... 
    ] 

Я «Миграция новичка», так что я не знаю, если это лучший вариант. Но это работает.

0

Я думаю, что он должен быть похож на Django 1.7+. Когда вы собираетесь запускать тесты, вы должны управлять этими моделями с помощью Django (только для целей тестирования). Это преобразование должно быть сделано до создания таблиц и Django позволяет дать настройки TEST_RUNNER в вашем settings.py

# settings_test.py 
TEST_RUNNER = 'utils.test_runner.ManagedModelTestRunner' 

# test_runner.py 
from django.test.runner import DiscoverRunner 

class ManagedModelTestRunner(DiscoverRunner): 
    """ 
    Test runner that automatically makes all unmanaged models in your Django 
    project managed for the duration of the test run, so that one doesn't need 
    to execute the SQL manually to create them. 
    """ 
    def setup_test_environment(self, *args, **kwargs): 
     from django.db.models.loading import get_models 
     super(ManagedModelTestRunner, self).setup_test_environment(*args, 
                    **kwargs) 
     self.unmanaged_models = [m for m in get_models(only_installed=False) 
           if not m._meta.managed] 
     for m in self.unmanaged_models: 
      m._meta.managed = True 

    def teardown_test_environment(self, *args, **kwargs): 
     super(ManagedModelTestRunner, self).teardown_test_environment(*args, **kwargs) 
     # reset unmanaged models 
     for m in self.unmanaged_models: 
      m._meta.managed = False 
+0

Этот код не работает. Я думаю, проблема в том, что Django теперь использует миграции, и этот код не меняет их. –