如何在Django admin中设置默认初始实例,重置数据库仍保留预置博客数据
解决Django项目预置初始Blog数据的两种方案
方案1:使用官方Fixtures方案
操作步骤如下:
- 第一步:在你注册的博客App根目录下新建
fixtures文件夹,Django默认会从每个App的fixtures目录读取初始数据文件 - 第二步:在fixtures目录下新建初始数据文件,命名为
initial_blogs.json,内容示例:
[ { "model": "你的App名称.blogpost", "pk": 1, "fields": { "title": "第一篇预置博客", "body": "这是第一篇预置博客的正文内容" } }, { "model": "你的App名称.blogpost", "pk": 2, "fields": { "title": "第二篇预置博客", "body": "这是第二篇预置博客的正文内容" } } ]
请把上面的你的App名称替换为你在settings.py的INSTALLED_APPS中注册的博客App对应的名称,需要多少条预置数据就按照格式新增对应条目即可。
- 第三步:执行完
python manage.py migrate后,额外执行python manage.py loaddata initial_blogs.json即可完成数据导入,你可以把这个命令加入项目的初始化脚本里简化操作。
方案2:自定义迁移文件(自动执行无需额外命令)
该方案更适合开箱即用的场景,用户克隆仓库后只需要执行一次migrate就能自动生成初始数据,无需手动执行loaddata:
- 第一步:执行命令生成空迁移文件:
python manage.py makemigrations 你的App名称 --empty --name add_initial_blogs - 第二步:打开生成的迁移文件(存放在博客App的migrations目录下,文件名类似
000x_add_initial_blogs.py),修改内容如下:
from django.db import migrations def add_initial_blogs(apps, schema_editor): BlogPost = apps.get_model('你的App名称', 'BlogPost') # 可自定义预置博客的数量和内容 initial_blogs = [ {"title": "第一篇预置博客", "body": "第一篇正文内容"}, {"title": "第二篇预置博客", "body": "第二篇正文内容"}, {"title": "第三篇预置博客", "body": "第三篇正文内容"}, ] for blog_data in initial_blogs: # get_or_create避免重复生成数据,多次执行migrate也不会新增重复条目 BlogPost.objects.get_or_create(**blog_data) class Migration(migrations.Migration): # dependencies保留自动生成的原有内容即可,无需修改 dependencies = [ ('你的App名称', '000x_上一个迁移文件的名称'), ] operations = [ migrations.RunPython(add_initial_blogs), ]
配置完成后,不管是新用户初始化项目还是重置数据库,只要执行python manage.py migrate就会自动生成预置的博客数据。
内容的提问来源于stack exchange,提问作者Van
相关产品推荐
相关产品推荐

