无法通过Shell在Django的前端查看数据库。
无法通过Shell在Django的前端查看数据库。
大家好。
我目前正在学习Django,并试图在inventiory_view.html上显示通过form创建的数据库。
我无法通过shell脚本做到这一点。
我能够通过shell终端显示对象,但无论我使用相同的命令Form1.objects.all
,我都无法在我想要的html页面上显示它。
我非常感谢您在这个问题上的帮助。
提前致谢
这是我从用户那里获取数据的form1.html。
{% extends 'base.html' %} {% block title %} Form1的标题 {% endblock %} {% block body %}导出CSV {% endblock %}Form1
views.py
from django.shortcuts import render, HttpResponse from form.models import Form1 from django.core.mail import send_mail from django.conf import settings from django.db import models import csv def index(request): return render(request, 'index.html') def form1(request): if request.method == "POST": item = request.POST.get('item') quantity = request.POST.get('quantity') vendor = request.POST.get('vendor') inward = request.POST.get('inward') form1 = Form1(item = item, quantity = quantity , vendor=vendor , inward= inward) form1.save() send_mail( '来自IT团队的测试邮件', '我们已经收到' + str(quantity) + '个' + item + '来自' + vendor + ' \n 入库编号' + str(inward) , 'techdevio20@example.com', ['sam.atharkar@gmail.com'], fail_silently=False, ) return render(request, 'form1.html') def export_csv(request): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="inventory.csv"' writer= csv.writer(response) writer.writerow(['物品', '入库编号', '数量', '供应商名称']) inventory = Form1.objects.all()
models.py
from django.db import models class Form1(models.Model): item = models.CharField(max_length=20) quantity = models.IntegerField() vendor = models.CharField(max_length=20) inward = models.IntegerField() def __str__(self): return self.item
urls.py
from django.contrib import admin from django.urls import path from form import views urlpatterns = [ path('',views.index, name = 'home'), path('form1/',views.form1, name = 'form1'), path('form2/',views.form2, name = 'form2'), path('login/',views.login, name = 'login'), path('signup/',views.signup, name = 'signup'), path('search/',views.search, name = 'search'), path('inventory_view/',views.inventory_view, name = 'inventory_view'), ]
无法通过Django中的Shell在前端查看数据库的原因是,代码中的Form1类没有objects成员。解决方法是在代码中创建一个单独的视图函数form1_entries,用于查询所有的Form1对象,并将查询结果以context的形式传递给模板form1_entries.html。在form1_entries.html模板中使用for循环遍历查询结果,并将结果展示出来。
同时,还可以在包含form1的视图函数中查询Form1对象,并将查询结果以context的形式传递给该视图函数的模板。需要在该模板中添加与form1_entries.html模板中相同的html代码。
具体实现可参考以下代码:
def form1_entries(request): context = {} entries = Form1.objects.all() context['entries'] = entries return render(request, 'form1_entries.html', context)
form1_entries.html模板代码:
{% for entry in entries %} {{ entry.item }} {{ entry.quantity }} {{ entry.vendor }} {{ entry.inward }} {% endfor %}
如果在Form1.objects.all()代码中出现Class 'Form1' has no 'objects' member pylint(no-member)的错误提示,可以参考stackoverflow上的答案进行解决。具体答案链接:[https://stackoverflow.com/a/47343542/14535309](https://stackoverflow.com/a/47343542/14535309)。