Я пытаюсь перенести мой проект на использование Django 1.7. Все в порядке, кроме 1 вещи. Модели внутри папок тестов.
Django 1.7 новые миграции запускают команду миграции внутри. Перед запуском syncdb. Это означает, что если модель не включена в миграцию - она не будет заполнена БД (а также проверять БД). Это то, что я сейчас испытываю.
Что я делаю:
В моем /app/tests/models.py
у меня есть фиктивная модель: class TestBaseImage(BaseImage): pass
Все, что он делает, это наследовать от абстрактной модели BaseImage
.
Затем в тестах я создаю экземпляры этой фиктивной модели для ее проверки.
Проблема в том, что она больше не работает. Он не включен в миграцию (это очевидно, поскольку я не хочу сохранять свои тестовые модели в производственной БД). Выполнение моих тестов вызывает ошибку DB, говорящей, что table does not exist
. Это имеет смысл, поскольку оно не включено в миграцию.
Есть ли способ заставить его работать с новой системой миграции? Я не могу найти способ "исправить" это.
Код, который я использую:
приложение/тесты/models.py
from ..models import BaseImage
class TestBaseImage(BaseImage):
"""Dummy model just to test BaseImage abstract class"""
pass
приложение /models.py
class BaseImage(models.Model):
# ... fields ...
class Meta:
abstract = True
заводы:
class BaseImageFactory(factory.django.DjangoModelFactory):
"""Factory class for Vessel model"""
FACTORY_FOR = BaseImage
ABSTRACT_FACTORY = True
class PortImageFactory(BaseImageFactory):
FACTORY_FOR = PortImage
пример теста:
def get_model_field(model, field_name):
"""Returns field instance"""
return model._meta.get_field_by_name(field_name)[0]
def test_owner_field(self):
"""Tests owner field"""
field = get_model_field(BaseImage, "owner")
self.assertIsInstance(field, models.ForeignKey)
self.assertEqual(field.rel.to, get_user_model())