当前位置: 首页 > 知识库问答 >
问题:

表单的错误“应为表或查询集,而不是str”

朱修德
2023-03-14

我正在使用python django构建一个用于库存管理的私人网站,我正在创建一个表单以在我的项目模型中添加项目,到目前为止,我已经重复了2-3次我的表单代码,但总是遇到相同的错误“Expected table或queryset,not str”,并且已经没有想法了。这是我的密码,

意见。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})

模型。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"),


]

tables.py:

import django_tables2 as tables
from .models import Item

class ItemTable(tables.Table):
    class Meta:
        model = Item

项目清单。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\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\localpackages\python37\site packages\django\core\handlers\exception.py”位于内部34。响应=获取响应(请求)

文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\core\handlers\base.py”位于\u get\u响应126中。回应=自我。通过中间件处理异常(e,请求)

文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\core\handlers\base.py”位于\u get\u响应124中。响应=包装的回调(请求,*回调参数,**回调参数)

添加项88中的文件“C:\Users\ASUS\mysite\main\views.py”。返回呈现(请求,“main/item_list.html”,{'form':form})

文件"c:\用户\asus\appdata\本地\包\pythonsoftwarefoundation.python.3.7_qbz5n2kfra8p0\localache\local-包\python37\site-包\django\shortcuts.py"在渲染36. Content=loader.render_to_string(template_name,上下文,请求,使用=使用)

render_to_string中的文件"c:\用户\asus\appdata\本地\包\pythonsoftwarefoundation.python.3.7_qbz5n2kfra8p0\localache\local-包\python37\site-包\django\模板\loader.py"返回template.render(上下文,请求)

render 61中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\backends\django.py”。回归自我。样板渲染(上下文)

render 171中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\base.py”。回归自我_渲染(上下文)

文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\localpackages\python37\site packages\django\template\base.py”位于_render163中。回归自我。点球手。渲染(上下文)

render 937中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\base.py”。位=节点。带注释的渲染(上下文)

render_注释904中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\base.py”。回归自我。渲染(上下文)

在渲染150中的文件"c:\用户\asus\appdata\本地\包\pythonsoftwarefoundation.python.3.7_qbz5n2kfra8p0\localache\local-包\python37\site-包\django\模板\loader_tags.py"。返回compiled_parent。_render(上下文)

文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\localpackages\python37\site packages\django\template\base.py”位于_render163中。回归自我。点球手。渲染(上下文)

render 937中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\base.py”。位=节点。带注释的渲染(上下文)

render_注释904中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\base.py”。回归自我。渲染(上下文)

render 62中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7_qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\loader\U tags.py”。结果=块。点球手。渲染(上下文)

render 937中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\base.py”。位=节点。带注释的渲染(上下文)

render_注释904中的文件“c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7\u qbz5n2kfra8p0\localcache\local packages\python37\site packages\django\template\base.py”。回归自我。渲染(上下文)

文件"c:\用户\asus\appdata\本地\包\pythonsoftwarefoundation.python.3.7_qbz5n2kfra8p0\localcache\local-包\python37\site-包\django_tables2\templatetags\django_tables2.py"在渲染145。

异常类型:ValueError位于/add_项/异常值:应为表或查询集,而不是str

任何帮助都将不胜感激

共有1个答案

路欣荣
2023-03-14

当您尝试渲染"item_list.html"时,您的错误似乎正在发生。

File "C:\Users\ASUS\mysite\main\views.py" in add_item 88. return render(request, "main/item_list.html", {'form': form})

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

顺便提一下,问题在于如何使用django_表2库。我不熟悉django_表2,但是从堆栈跟踪的这一部分开始

File "c:\users\asus\appdata\local\packages\pythonsoftwarefoundation.python.3.7_qbz5n2kfra8p0\localcache\local-packages\python37\site-packages\django_tables2\templatetags\django_tables2.py" in render 145. raise ValueError("Expected table or queryset, not {}".format(klass))

似乎您正在向某个标记传递一个字符串,该标记“需要一个表或查询集”

 类似资料:
  • 问题内容: 嘿,我是新来的hibernate。我不得不说,它确实简化了SQL查询的所有操作。但是,操作返回的结果目前对我来说很头疼。 结果以列表形式返回。大多数时候,我真的希望结果位于结果集中,这样我可以像使用结果集那样更轻松地操作它,可以按列名或索引指定值。在List中,我几乎归自己的贵族所有。 在某种程度上,我可以将列表检索到JSF数据表中,然后直接调用该成员。我不能总是这样做。不要问我为什么

  • 如何修复以下错误以及为什么会出现“操作数类型:M”?我已经阅读了aws文档并搜索了堆栈溢出,但几个小时后仍然无法解决此问题。我想以iso格式查询一个处于活动状态且日期介于开始日期和结束日期之间的项目。我将错误“操作数类型:M”解释为在操作数:datesell、:start和:end中使用映射类型。但是,所有操作数都只是字符串。 SQL命令类似于:SELECT datesell,profit FRO

  • 问题内容: 如何检查查询是否出错,而不是向用户显示错误(包含不安全的数据库信息)。 假设我遇到这样的情况,我的分页类采用URI段显示page 。如果有人这样写,我将得到一个错误,显示有关我的数据库的信息。 我该如何处理? 问题答案: 在application / config / database.php中设置 在模型或控制器中:

  • 问题内容: 我正在尝试基于REST API Ang AngularJS构建应用程序。我一直在关注本教程http://npmasters.com/2012/11/25/Symfony2-Rest- FOSRestBundle.html, 但是必须更改一些详细信息(折旧的方法),现在当我发布创建新实体时, “此表单不应包含其他字段”错误。 我的TaskType表格: 在我看来,现在我只渲染一种形式,但

  • 我可能有个老生常谈的问题,但我需要一个建议。 我正在为一个中心的DBMS工作,在那里有两种不同类型的客户:让我们称它们为Customer普通和CustomerSpecial。 当然,他们有共同的属性,比如名字,姓氏,出生日期...然后customerSpecial具有Customer普通没有的属性,反之亦然。 然后,customerSpecial和customerSpecial连接到不同的表:cu

  • 问题内容: 我正在尝试显示一个带有表单的页面,然后在提交表单时将一个添加到数据库。但是,我无法查看该表单,因为浏览器始终显示错误。其他帖子表明这可能是因为表单输入的名称与我从中获取的键不匹配,但是我所有的键均匹配。为什么会出现此错误? 问题答案: 您的视图接受并请求。仅在上填写。如果您尝试访问不存在的密钥,则会引发400错误。最初页面时没有键。 造成这种情况的常见模式是守护需要代码在一个块中。处理