PyTest-Django Отсутствие таблицы django_migration

Я пытаюсь добавить pytest-django в свою текущую среду pytest3/Django1.7.

В настоящее время мы не использовали плагин и страдали от общего состояния между определенными тестами

Кажется, что все выглядит хорошо, и тесты, кажется, проходят до конца, когда я получаю следующие сообщения об ошибках:

request = <SubRequest '_django_db_marker' for <Function 'test_filter_recurring_outside_sync_window'>>

    @pytest.fixture(autouse=True)
    def _django_db_marker(request):
        """Implement the django_db marker, internal to pytest-django.

        This will dynamically request the ``db`` or ``transactional_db``
        fixtures as required by the django_db marker.
        """
        marker = request.keywords.get('django_db', None)
        if marker:
            validate_django_db(marker)
            if marker.transaction:
                getfixturevalue(request, 'transactional_db')
            else:
                getfixturevalue(request, 'db')

ve/lib/python2.7/site-packages/pytest_django/plugin.py:376:


self = <django.db.backends.sqlite3.base.SQLiteCursorWrapper object at 0x11976a478>
query = 'SELECT "django_migrations"."app", "django_migrations"."name" FROM "django_migrations"', params = ()

    def execute(self, query, params=None):
        if params is None:
            return Database.Cursor.execute(self, query)
        query = self.convert_query(query)
>       return Database.Cursor.execute(self, query, params)
E       OperationalError: no such table: django_migrations

ve/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:485: OperationalError

Я попытался создать таблицу с ensure_schema в conftest.py. Я пробовал каждый вариант --nomigrations и --create-db до pytest.

Я предполагаю, что это странная проблема с конфигурацией, у меня есть устаревшая система, но я не уверен, с чего начать. У кого-нибудь есть предложения?

Ответ 1

Похоже, что проблема связана с миграцией.

Запуск ./manage.py schemamigration research --auto показывает, что большинство полей не заданы по умолчанию.

Затем вы запустите ./manage.py schemamigration research --init, а затем ./manage.py migrate research

Это сработало для меня после создания таблицы:

python manage.py migrate --run-syncdb

ПРИМЕЧАНИЕ. Не забывайте сначала запускать makemigrations python, то есть python manage.py makemigrations {name of the app where patients model is}

Полезные советы: Существует таблица, сгенерированная django, называемая django_migrations, которая отслеживает, какие миграции   было   применяется. Если вы удалите свой migrations, повторно сгенерируйте их и попробуйте   migrate без удаления записей из таблицы, тогда django будет   думаю, что они уже применяли их. Вы никогда не должны удалять свои   миграции, поскольку это вызовет путаницу django.

     

Вы можете пропустить шаг миграции, если вы активно развиваетесь. Если вы активно развиваетесь и хотите пропустить весь migrations  вы можете, но как только вы начнете использовать migrations, никогда не удаляйте   их. Вот что я использую при разработке нового проекта:

dropdb mydb && createdb mydb && python manage.py migrate --run-syncdb && python manage.py loaddata initial

Сначала он удаляет базу данных и все данные. Затем он создает пустую один. --run-syncdb генерирует схему и нагрузку loaddataданные из файла файла.

Итак, если вы все еще разрабатываете и можете удалить все свои данные и переместить что вы заботитесь о файле оснастки, тогда вы можете удалить все свои миграционные папки. Затем вы можете запускать команду выше каждый раз, когда вы меняете свой модель.