You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

扩展Django Site模型后迁移文件生成至site-packages而非本地应用的问题

问题原因解析
  • app_label的核心作用:Django的迁移系统完全靠app_label识别模型所属的应用。你给SiteSettings设置app_label='sites',等于明确告诉Django:这个模型是内置django.contrib.sites应用的一部分,不是你本地创建的应用。
  • 首次迁移无本地文件的原因:第一次执行makemigrations时,Django检测到'sites'是已存在的内置应用,不会在你的本地应用目录生成迁移文件,而是将该模型的迁移逻辑归到内置sites应用的迁移体系中。
  • 后续迁移文件跑到site-packages的原因:当你给SiteSettings添加字段时,Django会判定这是对内置sites应用模型的修改,自然会把新的迁移文件生成到site-packages/django/contrib/sites/migrations/——因为这是内置sites应用的默认迁移目录。
正确做法

直接删除app_label='sites'的配置,Django会自动将SiteSettings归到它所在的本地应用下,后续所有迁移文件都会正常生成在你本地应用的migrations目录里。关联Site模型只需要保留OneToOneField即可,完全不需要修改app_label。

内容的提问来源于stack exchange,提问作者wjh18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:55:26