Fli*_*imm 11 django django-migrations
我正在使用 Django 3.2。我已更改将此行添加到settings.py
:
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
Run Code Online (Sandbox Code Playgroud)
然后我运行这些命令:
$ python manage.py makemigrations
$ python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
该makemigrations
命令为我的应用程序创建新的迁移文件,不仅是我创建的应用程序,而且还在我的依赖项中。例如,我正在使用django-allauth
,并且此文件是在我的虚拟环境 (virtualenv) 中创建的:
.venv/lib/python3.8/site-packages/allauth/account/migrations/0003_auto_20210408_1526.py
Run Code Online (Sandbox Code Playgroud)
该文件不随django-allauth
. 当我从 git 部署此应用程序时,不包含此文件。
我该怎么办?如何进行切换DEFAULT_AUTO_FIELD
而不需要为依赖项创建新的迁移文件django-allauth
?
Fli*_*imm 14
理想情况下,您的第三方依赖项将在以下位置的配置中包含此行apps.py
:
from django.apps import AppConfig
class ExampleConfig(AppConfig):
default_auto_field = 'django.db.models.AutoField'
Run Code Online (Sandbox Code Playgroud)
在等待上游依赖项更新其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'
Run Code Online (Sandbox Code Playgroud)
然后修改INSTALLED_APPS
为settings.py
如下所示,替换django-allauth
本示例中的旧条目:
INSTALLED_APPS = [
# ....
# replace: "allauth.account", with
"projectname.apps.ModifiedAccountConfig",
# replace: "allauth.socialaccount", with
"projectname.apps.ModifiedSocialAccountConfig",
]
Run Code Online (Sandbox Code Playgroud)
如果依赖项没有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'
Run Code Online (Sandbox Code Playgroud)
现在,当您运行时python manage.py makemigrations
,不应为依赖项创建任何迁移文件。