Django dumpdata仅导出auth.permission与contenttypes数据,求解决方案
解决Django dumpdata无业务数据的问题
常见原因及修复步骤
1. 确认应用名称是否正确
- dumpdata指定应用时,必须用
INSTALLED_APPS里注册的精确名称,不能随便用文件夹名。先去settings.dev里核对INSTALLED_APPS,确认fund和user_account的注册名(比如有没有写成apps.fund这种完整路径)。 - 执行命令时用完整注册名,比如:
./manage.py dumpdata --indent=4 --settings=app.settings.dev apps.fund apps.user_account > data3.json
2. 检查数据库连接是否正确
- 先确认dumpdata用的settings确实连到了有数据的开发库:
- 打开
settings.dev的DATABASES配置,核对数据库名、用户名、密码和本地正在用的是否一致。 - 进shell手动查数据验证:
然后输入:./manage.py shell --settings=app.settings.dev
如果查不到数据,说明当前settings连的是空库,赶紧修正from fund.models import 你的业务模型类 print(你的业务模型类.objects.all())DATABASES配置。
- 打开
3. 排除模型未被正确识别的情况
- 检查
fund和user_account的apps.py,确保name属性和INSTALLED_APPS里的名称匹配:
比如fund/apps.py:from django.apps import AppConfig class FundConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'fund' # 必须和INSTALLED_APPS里的名称完全一致 - 还要确认模型的
Meta类没设置managed = False,这种模型dumpdata不会导出。
4. 处理外键关联问题
- 如果业务模型依赖其他应用的模型(比如User),dumpdata时要把关联模型也加上,否则可能导出空数据。比如:
./manage.py dumpdata --indent=4 --settings=app.settings.dev auth.user fund user_account > data3.json
5. Heroku loaddata的正确操作
- 导出后先打开
data3.json确认有业务数据,再上传到Heroku执行:- 把本地文件传到Heroku临时存储:
heroku local:push data3.json /tmp/data3.json - 执行loaddata:
heroku run python manage.py loaddata /tmp/data3.json --settings=app.settings.prod - 提前确保生产环境已经完成数据库迁移:
heroku run python manage.py migrate --settings=app.settings.prod
- 把本地文件传到Heroku临时存储:
6. 直接用Postgres备份恢复(备选方案)
如果dumpdata始终有问题,跳过Django工具,直接用Postgres原生备份:
- 导出本地数据库:
pg_dump -d 你的开发数据库名 -U 用户名 > local_dump.sql - 获取Heroku数据库连接信息:
heroku pg:credentials:url DATABASE_URL - 把本地备份导入Heroku:
psql 你的Heroku数据库URL < local_dump.sql
内容的提问来源于stack exchange,提问作者idunskyi
相关产品推荐
相关产品推荐

