При миграции мультитенантов 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
, поэтому вы можете создать новый ;)