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

Django 2.2升级至3.2后执行测试报create_sql()意外concurrently参数错误

问题原因

这个报错是Django 2.2升3.2版本的常见不兼容问题:
Django 3.2为PostgreSQL后端新增了索引并发创建能力,执行索引创建操作时会给Index.create_sql方法传入新增的concurrently参数,而你项目中要么存在2.2版本生成的旧迁移文件,要么有自定义实现的索引类,没有兼容这个新增参数。
正常运行不会触发全量迁移执行逻辑,只有测试时会走测试库重建、应用全量迁移的流程,所以只有跑测试时会报错。

解决步骤

  • 方案1(优先推荐):重生成适配3.2版本的迁移文件
    先备份所有app的migrations目录,之后删除每个app下migrations目录中除__init__.py之外的所有文件,执行以下命令重新生成迁移:
    python manage.py makemigrations
    
    新生成的迁移文件的索引定义会自动兼容3.2的参数要求。
  • 方案2:兼容自定义索引类
    如果项目中有继承自django.db.models.Index的自定义索引子类,给它的create_sql方法新增concurrently参数的默认值即可:
    # 修改前
    def create_sql(self, model, schema_editor):
        # 原有逻辑
    
    # 修改后
    def create_sql(self, model, schema_editor, concurrently=False):
        # 原有逻辑,不需要使用concurrently参数时直接忽略即可
    
  • 临时规避方案:
    如果不需要重写迁移,可在settings.py的测试配置中添加参数跳过序列化环节:
    DATABASES = {
        'default': {
            # 原有配置
            'TEST': {
                'SERIALIZE': False,
            }
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:57:01