При миграции мультитенантов Django возникает KeyError: "prune"

Итак, я работал в проекте некоторое время, и на самом деле не менял модели вообще, и поэтому не делал никаких миграций. Теперь мне нужно добавить два новых поля и удалить одно, что обычно должно быть в порядке вещей. Я использую django-tenants, поэтому моя команда для запуска миграций - ./manage.py migrate_schemas. Теперь, когда я запускаю эту команду, я получаю ошибку KeyError: "prune" (полная трассировка приведена ниже) в том, что кажется внутренним кодом Django.

После этого я попробовал отменить изменения, чтобы не было новой миграции, и снова запустить комнад, и получил ту же ошибку. Я также подумал, что возможно база данных стала "грязной" в какой-то момент, поэтому я попробовал мигрировать чистую базу данных с нуля, с тем же результатом. Миграция даже не запускается.

Кто-нибудь сталкивался с чем-то подобным?

Полный отслеживание (я упростил пути)

[standard:public] === Starting migration
Traceback (most recent call last):
  File ":directory/./manage.py", line 22, in <module>
    main()
  File ":directory/./manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "$venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "$/lib/python3.9/site-packages/django/core/management/__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "$venv/lib/python3.9/site-packages/django/core/management/base.py", line 402, in run_from_argv
    self.execute(*args, **cmd_options)
  File "$venv/lib/python3.9/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
  File "$venv/lib/python3.9/site-packages/django_tenants/management/commands/migrate_schemas.py", line 52, in handle
    executor.run_migrations(tenants=[self.PUBLIC_SCHEMA_NAME])
  File "$venv/lib/python3.9/site-packages/django_tenants/migration_executors/standard.py", line 11, in run_migrations
    run_migrations(self.args, self.options, self.codename, self.PUBLIC_SCHEMA_NAME)
  File "$venv/lib/python3.9/site-packages/django_tenants/migration_executors/base.py", line 53, in run_migrations
    MigrateCommand(stdout=stdout, stderr=stderr).execute(*args, **options)
  File "$venv/lib/python3.9/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
  File "$venv/lib/python3.9/site-packages/django/core/management/base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
  File "$venv/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 188, in handle
    if options["prune"]:
KeyError: 'prune'

Похоже на несовместимость версий.

prune опция добавлена в Django пару месяцев назад (Jan 22, 2022)

Если вы хотите использовать более новую версию Django, то вам необходимо вручную установить патч django-tenants и добавить --prune аргумент

def add_arguments(self, parser):
    parser.add_argument(
        '--prune', action='store_true', dest='prune',
        help='Delete nonexistent migrations from the django_migrations table.',
    )

PS Я не смог найти вопрос, связанный с prune, поэтому вы можете создать новый ;)

Вернуться на верх