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

Django CRUD新增数据入库成功但读取页面不显示数据

问题背景

我是Django与PostgreSQL初学者,目前正在开发CRUD功能,已完成新增插入页面开发,提交的详情数据可成功写入数据库:
数据成功写入数据库截图
但写入的数据无法在读取展示页面正常显示:
展示页面无数据截图

现有代码如下:

views.py

def show_cat(request):
    showcategory = Categories.objects.filter(isactive=True)
    #print(showall)
    serializer = CategoriesSerializer(showcategory,many=True)
    #print(serializer.data)
    return render(request,'polls/show_cat.html',{"data":serializer.data})

def insert_cat(request):
    if request.method == "POST":
        insertcategory = {}
        insertcategory['category_name']=request.POST.get('category_name')
        insertcategory['category_description']=request.POST.get('category_description')
        form = CategoriesSerializer(data=insertcategory)
        if form.is_valid():
            form.save()
            print("hkjk",form.data)
            messages.success(request,'Record Updated Successfully...!:)')
            return redirect('categories:show_cat')
        else:
            print(form.errors)
            return redirect('categories:show_cat')
    else:
        insertcategory = {}
        form = CategoriesSerializer(data=insertcategory)  
        if form.is_valid(): 
            print(form.errors)   
        return render(request,'polls/insert_cat.html')

urls.py

from django.urls import  path
from categories import views
from django.urls.conf import include  
from django.conf import settings  
from django.conf.urls.static import static  

urlpatterns=[
    path('',views.show_cat,name="show_cat"),
    path('insert_cat/',views.insert_cat,name="insert_cat"),
    path('edit_cat/',views.edit_cat,name="edit_cat"),
    path('del_cat/',views.del_cat,name="del_cat")
]

已尝试多种排查方式,仍无法解决读取页面不展示数据的问题。


排查修复步骤

按以下顺序检查,可快速定位问题:

  1. 优先检查过滤逻辑把数据筛空了
    你show_cat视图里只查询isactive=True的分类,但插入数据的逻辑里完全没有给isactive字段赋值。
    去看Categories模型的isactive字段定义,如果没设置default=True,新插入的记录这个字段默认值是False或NULL,会直接被filter(isactive=True)过滤掉,查询结果为空自然页面没数据。
    修复二选一即可:

    • 给模型字段加默认值:isactive = models.BooleanField(default=True),改完依次执行python manage.py makemigrations、python manage.py migrate
    • 插入数据时手动赋值:在构造insertcategory字典时加一行insertcategory['isactive'] = True
  2. 检查模板渲染逻辑
    先把show_cat视图里注释的print(serializer.data)放开,重启服务访问展示页,看控制台打印的内容:

    • 如果打印结果是空列表,回到第一步检查过滤条件和数据库里记录的isactive字段值
    • 如果打印结果里有你刚插入的数据,就是模板写错了:你传给模板的上下文变量名是data,是序列化后的字典列表,模板里必须用{% for item in data %}做循环,取字段时要和序列化器输出的字段名完全一致,别拼错字段名、别写错循环的变量名。
      可以先在模板里直接写{{ data }}测试,页面能输出字典格式的内容就说明数据传对了,再调整循环逻辑即可,参考正确写法:
    <table>
      <thead>
        <tr>
          <th>分类名称</th>
          <th>分类描述</th>
        </tr>
      </thead>
      <tbody>
        {% for item in data %}
        <tr>
          <td>{{ item.category_name }}</td>
          <td>{{ item.category_description }}</td>
        </tr>
        {% empty %}
        <tr>
          <td colspan="2">暂无分类数据</td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
    
  3. 代码精简提示
    你GET请求渲染插入页的那段代码完全多余,空数据跑is_valid()没有任何实际意义,直接删掉即可,精简后insert_cat的GET分支只需要留return render(request,'polls/insert_cat.html')就行。


内容的提问来源于stack exchange,提问作者Ameya Potdar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:18:20