You need to enable JavaScript to run this app. Django执行模型迁移后数据库表缺失部分字段问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Django执行模型迁移后数据库表缺失部分字段问题咨询

问题原因

你所有缺失的字段都错误使用了Python类型标注语法(冒号:)来定义Django模型字段,而非正确的属性赋值语法(等号=)。Django ORM扫描模型时,只会将被赋值为models.Field子类实例的类属性识别为需要映射到数据库的字段,类型标注的内容不会被ORM解析,自然不会生成对应的表字段。

你使用的错误写法属于合法的Python类型标注语法,Django不会对类的类型标注做额外校验,因此执行迁移命令全程不会抛出异常,只是不会生成对应字段。

# 错误写法:用了冒号,属于类型标注,不被ORM识别
created_at_one: models.DateField(auto_now_add=True)
title: models.CharField(max_length=20)
# 正确写法:用等号赋值,ORM会识别为数据库字段
created_at_one = models.DateField(auto_now_add=True)
title = models.CharField(max_length=20)
修复步骤
  • 把所有模型字段定义的冒号全部替换为等号,修改后的完整模型代码如下:
from django.db import models

class Todo(models.Model):
    content = models.CharField(max_length=100)
    created_at_one = models.DateField(auto_now_add=True)
    finished_at = models.DateField(null=True)
    is_completed = models.BooleanField(default=False)
    list = models.ForeignKey(
        "TodoList", related_name="todos", on_delete=models.CASCADE)


class TodoList(models.Model):
    title = models.CharField(max_length=20)
    created_at = models.DateField(auto_now_add=True)
  • 如果你是开发环境且测试数据不重要,建议删除app下migrations目录里除了__init__.py之外的所有文件,同时删除当前的数据库文件
  • 重新执行生成迁移命令:python manage.py makemigrations
  • 执行迁移应用命令:python manage.py migrate
  • 再次查看表结构即可看到所有字段已经正常生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:36:05