如何在Django中排除模型类A参与makemigrations与migrations操作?
如何将Django模型类排除在迁移操作之外?
要让类A不参与makemigrations和migrate操作,同时保留和其他模型共用业务逻辑的能力,最推荐的方案是把它改成抽象基类,具体操作如下:
方案一:将类A设为抽象基类
修改类A的Meta内部类,添加abstract = True属性。Django会自动识别抽象基类,不为它创建数据库表,也不会将其纳入迁移流程。
修改后的代码:
class A(models.Model, GrandparentClassSharedByAllClasses): value = models.CharField(max_length=2000, blank=False, null=False) def __str__(self): return self.value class Meta: verbose_name = _('test') verbose_name_plural = _('tests') abstract = True # 新增这一行,标记为抽象基类
抽象基类的核心作用就是复用字段和方法,自身不落地存储,完美匹配你的需求——其他模型可以直接继承类A,继承它的所有业务逻辑,同时各自生成独立的数据库表并参与迁移。
方案二:在AppConfig中排除模型(备选)
如果因特殊原因无法将类A改为抽象基类,可以在应用的AppConfig中手动排除该模型:
- 打开应用目录下的
apps.py,修改AppConfig类:
from django.apps import AppConfig class YourAppConfig(AppConfig): name = 'your_app_name' # 替换成你的应用名称 def ready(self): from django.db.models import loading # 注册应用模型时排除类A loading.register_models(self.name, exclude=['A'])
- 在
settings.py中确保应用使用这个自定义的AppConfig:
INSTALLED_APPS = [ # ... 'your_app.apps.YourAppConfig', # 替换成你的AppConfig路径 # ... ]
不过这个方案属于临时 workaround,不如抽象基类符合Django的设计理念,优先推荐方案一。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

