Skip to content

custom migration fail to migrate #1181

@amirreza8002

Description

@amirreza8002

hi
i wrote a custom migration file to add some data to a porject
it looks like this:

from django.db import migrations def make_teacher_group(apps, schema_editor): Group = apps.get_model("auth", "Group") Permission = apps.get_model("auth", "Permission") group = Group.objects.create(name="teachers") permission = Permission.objects.get(codename="teacher") group.permissions.add(permission) def delete_teacher_group(apps, schema_editor): Group = apps.get_model("auth", "Group") group = Group.objects.get(name="teachers") group.permissions.clear() group.delete() class Migration(migrations.Migration): dependencies = [ ("accounts", "0003_user_purchase_number_teacherdata"), ] operations = [ migrations.RunPython(make_teacher_group, delete_teacher_group), ]

when running pytest, it fails to migrate this with the following error:

============================================================================================================ test session starts ============================================================================================================= platform linux -- Python 3.12.8, pytest-8.3.5, pluggy-1.5.0 django: version: 5.1.7, settings: jozvenama_project.settings (from ini) rootdir: /home/amirreza/projects/jozvenama/backend configfile: pyproject.toml plugins: django-4.10.0, env-1.1.5 collected 14 items tests/test_accounts/test_models.py E =================================================================================================================== ERRORS =================================================================================================================== ________________________________________________________________________________________ ERROR at setup of TestUserModel.test_valid_data_creates_user ________________________________________________________________________________________ request = <SubRequest '_django_db_marker' for <Function test_valid_data_creates_user>> @pytest.fixture(autouse=True) def _django_db_marker(request: pytest.FixtureRequest) -> None: """Implement the django_db marker, internal to pytest-django.""" marker = request.node.get_closest_marker("django_db") if marker: > request.getfixturevalue("_django_db_helper") .venv/lib/python3.12/site-packages/pytest_django/plugin.py:552: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/pytest_django/fixtures.py:144: in django_db_setup db_cfg = setup_databases( .venv/lib/python3.12/site-packages/django/test/utils.py:206: in setup_databases connection.creation.create_test_db( .venv/lib/python3.12/site-packages/django/db/backends/base/creation.py:78: in create_test_db call_command( .venv/lib/python3.12/site-packages/django/core/management/__init__.py:194: in call_command return command.execute(*args, **defaults) .venv/lib/python3.12/site-packages/django/core/management/base.py:459: in execute output = self.handle(*args, **options) .venv/lib/python3.12/site-packages/django/core/management/base.py:107: in wrapper res = handle_func(*args, **kwargs) .venv/lib/python3.12/site-packages/django/core/management/commands/migrate.py:357: in handle post_migrate_state = executor.migrate( .venv/lib/python3.12/site-packages/django/db/migrations/executor.py:135: in migrate state = self._migrate_all_forwards( .venv/lib/python3.12/site-packages/django/db/migrations/executor.py:167: in _migrate_all_forwards state = self.apply_migration( .venv/lib/python3.12/site-packages/django/db/migrations/executor.py:255: in apply_migration state = migration.apply(state, schema_editor) .venv/lib/python3.12/site-packages/django/db/migrations/migration.py:132: in apply operation.database_forwards( .venv/lib/python3.12/site-packages/django/db/migrations/operations/special.py:196: in database_forwards self.code(from_state.apps, schema_editor) accounts/migrations/0004_teacher_group_logic.py:10: in make_teacher_group permission = Permission.objects.get(codename="teacher") .venv/lib/python3.12/site-packages/django/db/models/manager.py:87: in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <[RuntimeError('Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.') raised in repr()] QuerySet object at 0x7669610838f0>, args = (), kwargs = {'codename': 'teacher'} clone = <QuerySet []>, limit = 21, num = 0 def get(self, *args, **kwargs): """ Perform the query and return a single object matching the given keyword arguments. """ if self.query.combinator and (args or kwargs): raise NotSupportedError( "Calling QuerySet.get(...) with filters after %s() is not " "supported." % self.query.combinator ) clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs) if self.query.can_filter() and not self.query.distinct_fields: clone = clone.order_by() limit = None if ( not clone.query.select_for_update or connections[clone.db].features.supports_select_for_update_with_limit ): limit = MAX_GET_RESULTS clone.query.set_limits(high=limit) num = len(clone) if num == 1: return clone._result_cache[0] if not num: > raise self.model.DoesNotExist( "%s matching query does not exist." % self.model._meta.object_name ) E __fake__.Permission.DoesNotExist: Permission matching query does not exist. .venv/lib/python3.12/site-packages/django/db/models/query.py:649: DoesNotExist ========================================================================================================== short test summary info =========================================================================================================== ERROR tests/test_accounts/test_models.py::TestUserModel::test_valid_data_creates_user - __fake__.Permission.DoesNotExist: Permission matching query does not exist. 

as you can see, self = <[RuntimeError('Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.') raised in repr()] QuerySet object at 0x7669610838f0>, args = (), kwargs = {'codename': 'teacher'}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions