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

Django项目用--nomigrations测试时出现two_factor_phonedevice表不存在错误

问题原因分析:使用--nomigrations测试时django-two-factor-auth表不存在错误

核心原因:新版本库的模型加载/注册机制变化

从回退到旧版本(django-otp0.7.5、django-two-factor-auth1.9.1)问题消失的情况来看,新版本的库在模型注册逻辑上做了调整,导致--nomigrations模式下Django无法正确创建所需的数据库表:

  • 旧版本逻辑:django-two-factor-auth 1.9.x及更早版本,直接在应用的models.py中定义了PhoneDevice等模型,Django在--nomigrations模式下会扫描INSTALLED_APPS中应用的models.py,自动生成对应的数据表。
  • 新版本逻辑:django-otp 0.8.0+和django-two-factor-auth 1.14.0+改用了动态模型注册机制(比如通过django-otp的设备注册API),或者将模型放在了非默认的子模块中且AppConfig未显式声明这些模型。而Django的--nomigrations模式仅基于应用根目录下的models.py生成表结构,不会处理动态注册的模型,因此two_factor_phonedevice等表不会被创建,最终导致查询时报错。

关键验证依据

  • 正常运行迁移时,django-two-factor-auth自带的迁移文件会明确创建这些表,因此测试可以通过;
  • --nomigrations跳过了迁移执行,直接从模型定义生成表,但新版本的模型未被Django的自动扫描机制捕获,因此出现表缺失的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:18:17