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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:35:29