如何将CSV/JSON文件导入Django模型并生成数据表及前端展示
解决Django导入CSV/JSON到SQLite并前端展示的步骤
1. 先完成模型定义与数据库迁移
首先必须在子应用的models.py里定义和CSV/JSON字段匹配的模型,比如你的数据包含name、age、email字段,模型代码如下:
from django.db import models class Person(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() email = models.EmailField(unique=True) def __str__(self): return self.name
接着执行迁移命令生成SQLite数据表,这是让数据库产生变化的核心步骤:
python manage.py makemigrations python manage.py migrate
注意:要确保子应用已经添加到项目settings.py的INSTALLED_APPS列表中,否则迁移不会生效。
2. CSV/JSON文件的存放位置(无强制要求)
你可以在子应用内新建一个data文件夹,将文件放入其中(比如myapp/data/person_data.csv),只要后续代码能正确读取这个路径即可,也可以放在项目根目录的自定义文件夹里,完全按需选择。
3. 编写数据导入逻辑(推荐用自定义管理命令)
直接用Django shell或自定义命令导入数据,这里推荐自定义命令,方便重复执行:
- 在子应用中创建
management/commands目录,同时在该目录下添加__init__.py空文件 - 新建
import_data.py文件,根据文件类型编写导入代码:
CSV导入示例
import csv from django.core.management.base import BaseCommand from myapp.models import Person class Command(BaseCommand): help = '从CSV导入人员数据' def handle(self, *args, **kwargs): # 可选:清空现有数据 Person.objects.all().delete() # 读取CSV文件 with open('myapp/data/person_data.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: Person.objects.create( name=row['name'], age=int(row['age']), email=row['email'] ) self.stdout.write(self.style.SUCCESS('数据导入成功'))
JSON导入示例
如果是JSON文件(格式要求为列表嵌套字典),代码修改为:
import json from django.core.management.base import BaseCommand from myapp.models import Person class Command(BaseCommand): help = '从JSON导入人员数据' def handle(self, *args, **kwargs): Person.objects.all().delete() with open('myapp/data/person_data.json', 'r', encoding='utf-8') as f: data = json.load(f) for item in data: Person.objects.create( name=item['name'], age=item['age'], email=item['email'] ) self.stdout.write(self.style.SUCCESS('数据导入成功'))
然后执行命令完成导入:
python manage.py import_data
此时查看SQLite数据库,就能看到导入的数据了。
4. 前端表格展示数据
在子应用的views.py中编写视图函数获取数据:
from django.shortcuts import render from myapp.models import Person def person_list(request): people = Person.objects.all() return render(request, 'myapp/person_list.html', {'people': people})
在子应用的templates/myapp目录下新建person_list.html模板,编写表格代码:
<!DOCTYPE html> <html> <head> <title>人员列表</title> </head> <body> <table border="1"> <thead> <tr> <th>姓名</th> <th>年龄</th> <th>邮箱</th> </tr> </thead> <tbody> {% for person in people %} <tr> <td>{{ person.name }}</td> <td>{{ person.age }}</td> <td>{{ person.email }}</td> </tr> {% endfor %} </tbody> </table> </body> </html>
最后在项目的urls.py中配置路由:
from django.contrib import admin from django.urls import path from myapp.views import person_list urlpatterns = [ path('admin/', admin.site.urls), path('people/', person_list, name='person_list'), ]
启动服务python manage.py runserver后,访问http://localhost:8000/people/就能看到数据表格。
常见问题排查
- 迁移后数据库无变化:检查子应用是否添加到
INSTALLED_APPS,模型是否有语法错误 - 导入数据报错:核对CSV/JSON的字段名与模型字段名是否一致,数据类型是否匹配(比如CSV中的数字字段要转成对应类型)
- 前端无数据:检查视图是否正确查询到数据,模板变量名是否和视图传递的一致
内容的提问来源于stack exchange,提问作者Jyoti Akhter
相关产品推荐
相关产品推荐

