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

Django页面刷新后重复显示数据问题求助

解决Django中data.py数据修改后页面叠加显示新旧数据的问题

当前问题的核心是models.py中的数据插入代码写在模块级别,每次Django加载/重载该模块(比如修改代码后自动重启、服务器启动)时,都会执行这段循环插入代码,导致数据库中不断新增旧数据,最终页面叠加显示。


推荐方案:使用自定义管理命令刷新数据(可控且高效)

这个方案把数据更新的逻辑从模块加载移到手动触发的命令,只有当你修改data.py后主动执行命令,才会更新数据库,避免自动重复插入。

  1. 清理models.py的冗余代码
    只保留模型定义,删除模块级别的插入循环:
from django.db import models

class Title(models.Model):
    sd = models.CharField(max_length=255)
    name = models.CharField(max_length=255)
  1. 创建自定义管理命令
    在你的Django应用目录下,创建management/commands文件夹(如果没有的话),并在其中添加空的__init__.py文件,然后新建refresh_data.py文件:
from django.core.management.base import BaseCommand
from data import titles
from your_app_name.models import Title  # 替换成你的实际应用名称

class Command(BaseCommand):
    help = '将数据库中的Title数据替换为data.py的最新内容'

    def handle(self, *args, **options):
        # 先清空现有数据
        Title.objects.all().delete()
        # 插入data.py中的最新数据
        for title in titles['data']:
            Title.objects.create(sd=title['sid'], name=title['name'])
        self.stdout.write(self.style.SUCCESS('数据已成功更新!'))
  1. 执行命令更新数据
    每次修改data.py后,在终端运行以下命令:
python manage.py refresh_data

之后刷新页面,就能看到最新的data.py数据了。


临时测试方案:在视图中处理(不推荐生产环境)

如果只是临时测试,可以修改views.py,每次请求时先清空旧数据再插入新数据,但这种方式会导致每次请求都操作数据库,性能差且并发场景下有问题:

from django.shortcuts import render
from .models import Title
from data import titles

def get(request):
    # 清空所有旧数据
    Title.objects.all().delete()
    # 插入新数据
    for title in titles['data']:
        Title.objects.create(sd=title['sid'], name=title['name'])
    context = {'titles': Title.objects.all()}
    return render(request, "home.html", context)

注意事项

  • 生产环境中绝对不要用视图中实时删插的方案,会严重影响性能和数据安全。
  • 自定义命令方案可以配合脚本定时执行,或者在部署时自动触发,非常灵活。

内容的提问来源于stack exchange,提问作者Saad Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:01:38