无法通过Shell在Django的前端查看数据库。

27 浏览
0 Comments

无法通过Shell在Django的前端查看数据库。

大家好。

我目前正在学习Django,并试图在inventiory_view.html上显示通过form创建的数据库。

我无法通过shell脚本做到这一点。

我能够通过shell终端显示对象,但无论我使用相同的命令Form1.objects.all,我都无法在我想要的html页面上显示它。

我非常感谢您在这个问题上的帮助。

提前致谢

这是我从用户那里获取数据的form1.html

{% extends 'base.html' %}


  
    
    
    
    
    
{% block title %} Form1的标题 {% endblock %}
  
  {% block body %}
    

Form1

{% csrf_token %}
导出CSV {% endblock %}

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'),
]

0
0 Comments

无法通过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)。

0