如何通过脚本向Django数据库添加测试数据(无需Django Admin)
Django 自动添加测试数据脚本实现方案
有两种常用方案可以实现自动添加预设测试数据,无需通过Admin界面操作:
方案一:自定义Django管理命令(推荐)
这种方式符合Django的最佳实践,可直接通过manage.py运行,适合长期复用。
步骤1:创建命令目录结构
在你的目标Django应用下,创建如下目录和文件(确保每个目录都有__init__.py,让Django识别为可导入模块):
your_app/ ├── management/ │ ├── __init__.py │ └── commands/ │ ├── __init__.py │ └── add_test_data.py
步骤2:编写命令代码
在add_test_data.py中写入以下代码,替换为你的模型和测试数据:
from django.core.management.base import BaseCommand from your_app.models import Book # 替换为你的模型 class Command(BaseCommand): help = '向数据库添加预设测试数据' def handle(self, *args, **options): # 定义预设测试数据,字段需与模型一致 test_data = [ { 'title': 'Django实战指南', 'author': '张三', 'publish_date': '2023-01-01' }, { 'title': 'Python进阶教程', 'author': '李四', 'publish_date': '2022-05-15' } ] for item in test_data: # 使用get_or_create避免重复添加,用模型的唯一字段作为查询条件 obj, created = Book.objects.get_or_create( title=item['title'], # 替换为你的模型唯一标识字段 defaults=item ) if created: self.stdout.write(self.style.SUCCESS(f"成功添加: {obj.title}")) else: self.stdout.write(self.style.WARNING(f"数据已存在,跳过: {obj.title}"))
运行命令
在项目根目录执行:
python manage.py add_test_data
方案二:独立脚本(临时场景)
如果只是临时运行,可编写独立脚本,无需创建管理命令,但需要先配置Django环境。
编写脚本
在项目根目录(与manage.py同目录)创建add_test_data.py:
import os import django # 配置Django环境,替换为你的项目settings模块 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') django.setup() from your_app.models import Book # 替换为你的模型 # 预设测试数据 test_data = [ { 'title': 'Django实战指南', 'author': '张三', 'publish_date': '2023-01-01' }, { 'title': 'Python进阶教程', 'author': '李四', 'publish_date': '2022-05-15' } ] for item in test_data: obj, created = Book.objects.get_or_create( title=item['title'], defaults=item ) print(f"{'添加成功' if created else '已存在,跳过'}: {obj.title}")
运行脚本
直接执行:
python add_test_data.py
注意事项
- 替换代码中的
your_app、your_project为实际的应用名和项目名 - 确保测试数据包含模型的所有必填字段,外键字段需先创建关联对象再引用
- 若需要清空现有数据后重新添加,可在创建数据前执行
Model.objects.all().delete()(谨慎操作,避免误删生产数据) - 使用
get_or_create可避免重复执行脚本时生成重复数据,若需要强制覆盖,可删除该逻辑直接创建实例
内容的提问来源于stack exchange,提问作者Abdullah Roshan
相关产品推荐
相关产品推荐

