表单的错误"Expected table or queryset, not str "



我正在使用python-django构建一个用于库存管理的私人网站,并且我正在创建一个表单来在我的Item模型中添加项目,到目前为止,我已经重做了2-3次表单代码,但总是遇到同样的错误"应为表或查询集,而不是str"已经没有什么想法了。这是我的代码,

views.py:

from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse
from .models import Item, Tender
from django.urls import reverse
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages
from .forms import NewUserForm, AddItemForm
from .tables import ItemTable

def item_list(request):
table = ItemTable(Item.objects.all())
return render(request, "main/item_list.html", {
"table": table
})
def add_item(request):
if request.method == 'POST':
form = AddItemForm(request.POST)
if form.is_valid():
Item = form.save(commit = False)
Item.item_updated = timezone.now()
Item.save()
return redirect("main:item_list")
else:
form = AddItemForm()

return render(request, "main/item_list.html", {'form': form})

models.py:

from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
class Item(models.Model):
item_no = models.CharField(max_length=200, primary_key = True )
item_name = models.CharField(max_length = 200)
item_quantity = models.CharField(max_length = 200, default = 0)
item_description = models.TextField(blank = True)
item_updated = models.DateTimeField("Item updated", default=datetime.now())
item_price = models.CharField(max_length = 100, default = 0)
def __str__(self):
return self.item_name

forms.py:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from .models import Item
from datetime import datetime
class AddItemForm(forms.ModelForm):
class Meta:
model = Item
fields = (
'item_no', 'item_name', 'item_quantity', 'item_description', 'item_price'
)

add_item.html:

{% extends "main/header.html" %}
{% block content %}
<h1>Add Item Form</h1>
<form method="POST" class="post-form">
{% csrf_token %}
{{form.as_p}}
<button class="btn" type="submit">Add Item</button>
</form>
{% endblock %}

urls.py:

from django.urls import path
from . import views
app_name = "main"
urlpatterns = [
path("", views.homepage, name="homepage"),
path("register/", views.register, name="register"),
path("logout/", views.logout_request, name="logout"),
path("login/", views.login_request, name="login"),
path("item_list/", views.item_list, name="items"),
path("tender/", views.tender, name="tender"),
path("add_item/", views.add_item, name="add_item"),

]

表格.py:

import django_tables2 as tables
from .models import Item
class ItemTable(tables.Table):
class Meta:
model = Item

item_list.html:

{% extends "main/header.html" %}
{% load render_table from django_tables2 %}
{% block content %}
<a href = "/add_item" class="waves-effect waves-light btn"><i class="material-icons left">add_circle</i>Add Item</a>
{% render_table table %}
{% endblock %}

堆栈跟踪:

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\core\handlers\exception.py"在内部34.response=get_response(request)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\core\handlers\base.py"在_get_response中126.response=self.process_exception_by_middleware(e,request)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\core\handlers\base.py"在_get_response中124.response=wrapped_callback(请求,*callback_args,**callback_kwargs)

文件";C: \Users\ASUS\mysite\main\views.py"在add_item中88.返回render(request,"main/item_list.html",{'form':form})

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site-packages\django\shortcuts.py"渲染中36.content=loader.render_to_string(template_name,context,request,using=using)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\loader.py"在render_to_string中62.返回模板.render(上下文,请求)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\backends\django.py"渲染中61.返回self.template.render(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"渲染中171.回归自我_呈现(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"在应答器中(_R)163.return-self.nodelist.render(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"渲染中937.bit=node.render_anotated(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"在render_anotated中904.返回self.render(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\loader_tags.py"渲染中150.返回compiled_parent_呈现(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"在应答器中(_R)163.return-self.nodelist.render(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"渲染中937.bit=node.render_anotated(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"在render_anotated中904.返回self.render(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\loader_tags.py"渲染中62.result=block.nodelist.render(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"渲染中937.bit=node.render_anotated(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django\template\base.py"在render_anotated中904.返回self.render(上下文)

文件"c: \users\asus\appdata\local\packages\pythonsoftwareundation.python.3.7_qbz5n2kra8p\localcache\local packages\pyton37\site packages\django_tables2\templatetags\django_tables2.py"渲染中145.引发ValueError("预期的表或查询集,而不是{}".format(klass))

异常类型:值/add_item/异常值处出现错误:应为表或查询集,而不是str

如有任何帮助,将不胜感激

当您尝试渲染";item_list.html";。

File "C:UsersASUSmysitemainviews.py" in add_item 88. return render(request, "main/item_list.html", {'form': form})

这是一个你似乎没有提供的文件:)

顺便说一句,问题在于你是如何使用django_tables2库的。我不熟悉django_tables2,但从堆栈跟踪的那部分来看

File "c:usersasusappdatalocalpackagespythonsoftwarefoundation.python.3.7_qbz5n2kfra8p0localcachelocal-packagespython37site-packagesdjango_tables2templatetagsdjango_tables2.py" in render 145. raise ValueError("Expected table or queryset, not {}".format(klass))

看起来你正在向某个标签传递一个字符串;期望一个表或查询集";

最新更新