这些迁移对数据库有什么影响(例如,约束)?
对架构没有影响。你可以在python manage.py sqlmigrate myapp 000x_mymigration
.
但是,它仍然可以CREATE TABLE
,INSERT INTO ... SELECT
(昂贵)DROP TABLE
,,ALTER TABLE
。
这是“设计”和“wontfix”:
鉴于 IntegerChoices 字段没有显示给(非员工)用户,也没有以表格形式显示,是否还有其他实用程序?
是的,模型验证。
参考:https ://docs.djangoproject.com/en/3.2/ref/models/fields/#choices
我正在考虑只是更改MyObject.a_type
为 IntegerField,并继续在AType
任何地方使用,但没有进行所有迁移。
您可以通过choices
修补MigrationAutodetector
和忽略makemigrations
。migrate
您还可以忽略_verbose_name
and help_text
。
mysite/apps.py:
from django.apps import AppConfig
from django.core.management.commands import makemigrations, migrate
from django.db import models
from django.db.migrations import autodetector
class MigrationAutodetector(autodetector.MigrationAutodetector):
ignored_field_attribute_names = [
'choices',
# '_verbose_name',
# 'help_text',
]
def deep_deconstruct(self, obj):
if isinstance(obj, models.Field):
for attr_name in self.ignored_field_attribute_names:
setattr(obj, attr_name, None)
return super().deep_deconstruct(obj)
class MySiteAppConfig(AppConfig):
name = 'mysite'
def ready(self):
makemigrations.MigrationAutodetector = MigrationAutodetector
migrate.MigrationAutodetector = MigrationAutodetector
pass
我的网站/settings.py:
INSTALLED_APPS = [
# ...
'mysite.apps.MySiteAppConfig',
]