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

Django测试数据库未正确应用迁移:InvoicePDFTemplate字段异常

解决Django测试数据库未识别InvoicePDFTemplate.terms字段的问题

以下是针对你遇到的问题的具体排查和解决步骤:

1. 强制重建测试数据库

测试数据库可能存在缓存或残留数据,导致迁移未正确应用。运行测试时直接强制重建数据库:

python manage.py test invoice --recreate-db

在CI/CD脚本中,可在测试前先执行迁移命令确保测试库同步:

python manage.py migrate --noinput
python manage.py test invoice

2. 修复迁移历史不匹配问题

如果之前删除/重建过迁移,可能导致本地与生产库的迁移历史不一致:

  • 先在本地开发环境,将生产库已完成的迁移标记为已执行(避免重复创建字段):
    python manage.py migrate --fake invoice
    
  • 重新生成正确的迁移文件:
    python manage.py makemigrations invoice
    
  • 将新生成的迁移文件提交到代码仓库,确保CI/CD环境拉取最新代码后执行迁移。

3. 检查测试类配置

确认测试代码使用的是正确的测试基类:

  • 避免使用SimpleTestCase(不会创建数据库和应用迁移),改用TestCase或TransactionTestCase:
    from django.test import TestCase
    
    class InvoicePDFTemplateTest(TestCase):
        # 测试逻辑
    
  • 检查是否存在override_settings修改数据库配置的情况,确保测试使用的数据库与迁移目标一致。

4. 验证PostgreSQL权限与迁移日志

针对psycopg2的报错,排查CI/CD环境的PostgreSQL配置:

  • 确保测试用数据库用户拥有创建表、修改列的完整权限。
  • 在CI脚本中添加verbose迁移命令,查看迁移执行细节,确认InvoicePDFTemplate的terms字段是否被正确创建:
    python manage.py migrate --verbose
    

5. 确认模型代码一致性

再次核对InvoicePDFTemplate模型的terms字段定义,确保代码已提交到仓库且CI环境拉取的是最新版本:

class InvoicePDFTemplate(models.Model):
    # 现有字段
    terms = models.TextField(blank=True, null=True)  # 确认该字段存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:03:14