You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

克隆GitHub上的Django项目后执行makemigrations和migrate未生成自定义模型表的问题求助

解决Django自定义Model未生成数据库表的问题

我之前也碰到过完全一样的问题,太闹心了!咱们一步步来排查,应该能搞定:

1. 确认App已添加到INSTALLED_APPS

这是最容易踩的低级坑!打开项目根目录的settings.py,检查INSTALLED_APPS列表里有没有包含队友写的那个业务App的名称。比如如果App叫business,必须加上这一行:

INSTALLED_APPS = [
    # Django默认自带的App...
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    ...
    # 一定要加上你的自定义业务App
    'business',
]

要是没加这行,Django根本不会扫描这个App里的models文件!

2. 检查自定义Model的正确性

  • 先看队友写的models.py有没有语法错误:比如少了括号、缩进不对,或者继承类写错了(比如把models.Model写成model.Model)。
  • 确保每个自定义Model都正确继承了models.Model,示例:
from django.db import models

class Customer(models.Model):
    name = models.CharField(max_length=100)
    phone = models.CharField(max_length=11)
    # 其他字段...
  • 如果App里是分模块管理models的(比如有models子目录),还要确认apps.py里的name和App目录名一致,并且在App根目录的__init__.py里导入了所有models(比如from .models import *),不然Django识别不到这些分散的Model。

3. 手动指定App生成迁移文件

有时候makemigrations命令会默认只扫描当前工作目录的App,试试明确指定业务App来生成迁移:

python manage.py makemigrations business

这里的business替换成你的实际App名称。执行完去App的migrations目录看看,有没有生成以数字开头的迁移文件(不是Django默认那些authadmin相关的)。

4. 检查迁移是否被正确应用

执行migrate的时候也指定App试试:

python manage.py migrate business

然后用命令查看迁移状态,确认业务App的迁移是否都标记为已应用:

python manage.py showmigrations

如果你的App对应的迁移项前面没有[X],说明迁移没成功执行,得仔细看命令输出的报错信息。

5. 确认数据库配置是否正确

再检查一遍settings.py里的DATABASES配置,是不是连接到了你在phpMyAdmin里查看的那个数据库?有时候可能不小心连到了本地另一个数据库,导致表生成到别的地方,你在目标phpMyAdmin里自然看不到。

6. 清理旧迁移文件重新生成

如果之前的迁移文件有损坏或者冲突,可以试试以下步骤(注意:操作前备份好数据库数据!):

  • 删除业务App下migrations目录里除了__init__.py之外的所有文件
  • 登录phpMyAdmin,删除数据库里的django_migrations表(这个表记录了迁移历史)
  • 重新执行迁移命令:
python manage.py makemigrations business
python manage.py migrate

如果以上步骤都试过还是不行,把执行makemigrationsmigrate时的报错信息贴出来,能更快定位问题!

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

火山引擎 最新活动