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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:18:05