Я использовал django
хранитель в моем проекте. По какой-то причине я добавил новое поле в django
модель группы с таким кодом:
if not hasattr(Group, 'project'):
project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True, related_name='groups')
project.contribute_to_class(Group, 'project')
Пока все в порядке. Но после команды makemigration
я понял, что django добавляет файл миграции за пределы моего каталога проекта. Я хочу сделать этот файл постоянным. Я нашел решение с определением MIGRATION_MODULES
в моем settings.py
:
MIGRATION_MODULES = {
'auth': 'preferences.migrations' # preferences is an app of mine
}
Но на этот раз модуль-хранитель django выдает ошибку после команды makemigration
. Ниже приведены ошибки:
Traceback (последний вызов был последним): файл "./manage.py", строка 16, в файле execute_from_command_line (sys.argv) "/ usr / local / lib / python3 .6 / site-packages / django / core / management / init .py ", строка 381, в файле execute_from_command_line utility.execute ()" / usr / local / lib / python3. 6 / site-packages / django / core / management / init .py ", строка 375, в файле execute self.fetch_command (подкоманда) .run_from_argv (self.argv) файл" / usr / local / lib / python3 .6 / site-packages / django / core / management / base.py ", строка 323, в файле run_from_argv self.execute (* args, ** cmd_options)" / usr / local / lib / python3. 6 / site-packages / django / core / management / base.py ", строка 364, в файле execute output = self.handle (* args, ** options) Файл" /usr/local/lib/python3.6/ site-packages / django_cassandra_engine / management / commands / makemigrations.py ", строка 22, в дескрипторе super (Command, self) .handle (* args, ** options) Файл" /usr/local/lib/python3.6 /site-packages/django/core/management/base.py ", строка 83, в обертке d res = handle_fun c (* args, ** kwargs) Файл "/usr/local/lib/python3.6/site-packages/django/core/management/commands/makemigrations.py", строка 87, в загрузчике дескриптора = MigrationLoader (Нет, ignore_no_migrations = True) Файл "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", строка 49, в init Файл self.build_graph () "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", строка 274, в build_graph поднять файл исключений "/ usr / local / lib / python3 .6 / site-packages / django / db / migrations / loader.py ", строка 248, в файле build_graph self.graph.validate_consistency ()" / usr / local / lib / python3. 6 / site-packages / django / db / migrations / graph.py ", строка 195, в validate_consistency [n.raise_error () для n в self.node_map.values (), если isinstance (n, DummyNode)] Файл" / usr /local/lib/python3.6/site-packages/django/db/migrations/graph.py ", строка 195, в [n.raise_error () для n в self.node_map.values (), если isinstance (n , DummyNode)] Файл "/usr/local/lib/python3.6/site-packages/django/db/mig rations / graph.py ", строка 58, в методе allow_error поднять NodeNotFoundError (self.error_message, self.key, origin = self.origin) django .db.migrations.exceptions.NodeNotFoundError: миграция auth.0012_group_project зависимости зависимостей ссылаются на несуществующий родительский узел ('projects', '0001_initial')
Я пытался добавить опекуна к MIGRATION_MODULES
определениям. Но на этот раз миграции генерируются неправильно. После того, как я попробовал команду migrate
, она выдает следующие ошибки:
Traceback (последний вызов был последним): файл "./manage.py", строка 16, в файле execute_from_command_line (sys.argv) " /usr/local/lib/python3.6/site-packages/django/core/management/init.py ", строка 381, в файле execute_from_command_line utility.execute ()" / usr / local /lib/python3.6/site-packages/django/core/management/init.py ", строка 375, в файле execute self.fetch_command (подкоманда) .run_from_argv (self.argv) File" /usr/local/lib/python3.6/site-packages/django/core/management/base.py ", строка 323, в файле run_from_argv self.execute (* args, ** cmd_options) Файл" / usr / local /lib/python3.6/site-packages/django/core/management/base.py ", строка 364, в файле execute output = self.handle (* args, ** options)" "/ usr / local / lib /python3.6/site-packages/django_cassandra_engine/management/commands/migrate.py ", строка 13, в дескрипторе возвращают super (Command, self) .handle (* args, ** options) Файл "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", строка 83, в упакованном файле res = handle_fun c (* args, ** kwargs) "/usr/local/lib/python3.6/site-packages/django/core/management/commands/migrate.py", строка 87, в дескрипторе executor = MigrationExecutor (файл подключения, self.migration_progress_callback) "/ usr /local/lib/python3.6/site-packages/django/db/migrations/executor.py ", строка 18, в init self.loader = файл MigrationLoader (self.connection)" / usr / local / lib / python3 .6 / site-packages / django / db / migrations / loader.py ", строка 49, в файле init self.build_graph ()" / usr / local / lib / python3 .6 / site-packages / django / db / migrations / loader.py ", строка 275, в файле build_graph self.graph.ensure_not_cycli c () Файл" / usr / local / lib / python3 .5 .db.migrations.exceptions.CircularDependencyError: users.0001_initial, account. 0002_account_owner, projects.0001_initial, auth.0002_auto_20200426_0201, auth.0001_initial
В сгенерированных файлах миграции разделы зависимостей (в приложении настроек, на которое указывают определения mig_modules):
001_initial.py:
dependencies = [
('auth', '0002_auto_20200426_0201'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
0002_auto_20200426_0201.py
dependencies = [
('auth', '0001_initial'),
('projects', '0001_initial'),
]
Где моя ошибка? Как я могу решить эту проблему? Я очень смущен.