更改 DEFAULT_AUTO_FIELD 时迁移依赖项模型

2023-11-27

我正在使用 Django 3.2。我已更改将此行添加到settings.py:

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

然后我运行这些命令:

$ python manage.py makemigrations
$ python manage.py migrate

The makemigrations命令为我的应用程序创建新的迁移文件,不仅是我创建的应用程序,而且还在我的依赖项中。例如,我正在使用django-allauth,这个文件是在我的虚拟环境(virtualenv)中创建的:

 .venv/lib/python3.8/site-packages/allauth/account/migrations/0003_auto_20210408_1526.py

该文件不附带django-allauth。当我从 git 部署此应用程序时,不包含此文件。

我该怎么办?我怎样才能切换DEFAULT_AUTO_FIELD无需为依赖项创建新的迁移文件,例如django-allauth?


理想情况下,您的第三方依赖项将在配置中包含此行apps.py:

from django.apps import AppConfig

class ExampleConfig(AppConfig):
    default_auto_field = 'django.db.models.AutoField'

在等待上游依赖项更新它们的同时apps.py或迁移文件,您可以自己覆盖应用程序配置。如果尚不存在,请创建一个apps.py您的主应用程序目录中的文件(例如:project/apps.py),并覆盖依赖项的配置。在此示例中,我将覆盖以下配置django-allauth:

from allauth.account.apps import AccountConfig
from allauth.socialaccount.apps import SocialAccountConfig

class ModifiedAccountConfig(AccountConfig):
    default_auto_field = 'django.db.models.AutoField'

class ModifiedSocialAccountConfig(SocialAccountConfig):
    default_auto_field = 'django.db.models.AutoField'

然后修改INSTALLED_APPS in settings.py看起来像这样,替换旧条目django-allauth在这个例子中:

INSTALLED_APPS = [
    # ....
    # replace: "allauth.account", with
    "projectname.apps.ModifiedAccountConfig",
    # replace: "allauth.socialaccount", with
    "projectname.apps.ModifiedSocialAccountConfig",
]

如果依赖项没有apps.py要覆盖的文件,您仍然可以创建一个AppConfig子类在project/apps.py像这样:

from django.apps import AppConfig

class ModifiedExampleDependencyConfig(AppConfig):
    name = 'exampledependency' # the python module
    default_auto_field = 'django.db.models.AutoField'

现在当你跑步时python manage.py makemigrations,不应为依赖项创建迁移文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 DEFAULT_AUTO_FIELD 时迁移依赖项模型 的相关文章

随机推荐