I used django
guardian in my project. For a reason, I added a new field to django
group model with this code:
if not hasattr(Group, 'project'):
project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True, related_name='groups')
project.contribute_to_class(Group, 'project')
So far, everything is ok. But I realized after makemigration
command, django adds migration file to outside of my project directory. I want to make this file persistent. I found a solution with defining MIGRATION_MODULES
in my settings.py
:
MIGRATION_MODULES = {
'auth': 'preferences.migrations' # preferences is an app of mine
}
But this time, django guardian module gives error after makemigration
command. The errors are below:
Traceback (most recent call last): File "./manage.py", line 16, in execute_from_command_line(sys.argv) File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.6/site-packages/django_cassandra_engine/management/commands/makemigrations.py", line 22, in handle super(Command, self).handle(*args, **options) File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped res = handle_func(*args, **kwargs) File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/makemigrations.py", line 87, in handle loader = MigrationLoader(None, ignore_no_migrations=True) File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in init self.build_graph() File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 274, in build_graph raise exc File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 248, in build_graph self.graph.validate_consistency() File "/usr/local/lib/python3.6/site-packages/django/db/migrations/graph.py", line 195, in validate_consistency [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)] File "/usr/local/lib/python3.6/site-packages/django/db/migrations/graph.py", line 195, in [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)] File "/usr/local/lib/python3.6/site-packages/django/db/migrations/graph.py", line 58, in raise_error raise NodeNotFoundError(self.error_message, self.key, origin=self.origin) django.db.migrations.exceptions.NodeNotFoundError: Migration auth.0012_group_project dependencies reference nonexistent parent node ('projects', '0001_initial')
I tried add guardian to MIGRATION_MODULES
definitions. But this time, migrations generated wrongly. After I tried migrate
command it gives this errors:
Traceback (most recent call last): File "./manage.py", line 16, in execute_from_command_line(sys.argv) File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.6/site-packages/django_cassandra_engine/management/commands/migrate.py", line 13, in handle return super(Command, self).handle(*args, **options) File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped res = handle_func(*args, **kwargs) File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 87, in handle executor = MigrationExecutor(connection, self.migration_progress_callback) File "/usr/local/lib/python3.6/site-packages/django/db/migrations/executor.py", line 18, in init self.loader = MigrationLoader(self.connection) File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in init self.build_graph() File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 275, in build_graph self.graph.ensure_not_cyclic() File "/usr/local/lib/python3.6/site-packages/django/db/migrations/graph.py", line 274, in ensure_not_cyclic raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle)) django.db.migrations.exceptions.CircularDependencyError: users.0001_initial, accounts.0002_account_owner, projects.0001_initial, auth.0002_auto_20200426_0201, auth.0001_initial
In generated migration files, dependencies sections are(in preferences app which migration_modules definitions point):
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'),
]
Where is my error? How can I solve this problem? I'm very confused.