Skip to content

custom migration fail to migrate #1181

Open
@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