Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QuerySelectField未显示预期输出_Python_Sqlalchemy_Pyramid_Wtforms - Fatal编程技术网

Python QuerySelectField未显示预期输出

Python QuerySelectField未显示预期输出,python,sqlalchemy,pyramid,wtforms,Python,Sqlalchemy,Pyramid,Wtforms,我得到的错误是TypeError:“Query”对象不可调用 我正在金字塔中创建一个博客引擎,我被困在QuerySelectField中,如何在名为categories的单独表中显示类别,categories是文章模型的外键 预期产出 “类别”字段应显示数据库中存在的所有类别以供选择 型号.py DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) Base = declarative_bas

我得到的错误是
TypeError:“Query”对象不可调用

我正在金字塔中创建一个博客引擎,我被困在QuerySelectField中,如何在名为categories的单独表中显示类别,categories是文章模型的外键

预期产出

“类别”字段应显示数据库中存在的所有类别以供选择

型号.py

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()

class Category(Base):
    __tablename__ = 'categories'
    id = Column(Integer, primary_key=True)
    name = Column(String(100), unique=True, nullable=False)
    description = Column(Text, nullable=False)


class Article(Base):
    __tablename__ = 'articles'
    id = Column(Integer, primary_key=True)
    title = Column(String(255), unique=True, nullable=False)
    body =  Column(Text, nullable=False)
    category = Column(ForeignKey(Category.name), nullable=False)
    created = Column(DateTime, default=datetime.datetime.now)

    @property
    def slug(self):
        return urlify(self.title)

    @property
    def created_in_words(self):
        return time_ago_in_words(Article.created)
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
import sqlalchemy as sa
from blog.forms import ArticleCreateForm

from blog.models import (
    DBSession,
    Article, Category,
    )

@view_config(route_name='home', renderer='articles/index.jinja2')
def index(request):
    articles = DBSession.query(Article).order_by(sa.desc(Article.created))
    return {'articles': articles}

@view_config(route_name='article_action', match_param='action=create', renderer='articles/create.jinja2')
def create(request):
    article = Article()
    form = ArticleCreateForm(request.POST)
    if request.method == 'POST' and form.validate():
        form.populate_obj(article)
        DBSession.add(article)
        return HTTPFound(location=request.route_url('home'))
    return {'form':form, 'action':request.matchdict.get('create')}
from models import DBSession
from models import Category
from wtforms import Form, TextField, TextAreaField, SubmitField, validators
from wtforms.ext.sqlalchemy.fields import QuerySelectField

def Category_choice():
    return DBSession.query(Category.name)

class ArticleCreateForm(Form):
    title = TextField('Title', [validators.required(), validators.length(min=1,max=240)])
    body = TextAreaField('Content', [validators.required()])
    category = QuerySelectField('Category', query_factory=Category_choice())
    submit = SubmitField()
视图.py

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()

class Category(Base):
    __tablename__ = 'categories'
    id = Column(Integer, primary_key=True)
    name = Column(String(100), unique=True, nullable=False)
    description = Column(Text, nullable=False)


class Article(Base):
    __tablename__ = 'articles'
    id = Column(Integer, primary_key=True)
    title = Column(String(255), unique=True, nullable=False)
    body =  Column(Text, nullable=False)
    category = Column(ForeignKey(Category.name), nullable=False)
    created = Column(DateTime, default=datetime.datetime.now)

    @property
    def slug(self):
        return urlify(self.title)

    @property
    def created_in_words(self):
        return time_ago_in_words(Article.created)
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
import sqlalchemy as sa
from blog.forms import ArticleCreateForm

from blog.models import (
    DBSession,
    Article, Category,
    )

@view_config(route_name='home', renderer='articles/index.jinja2')
def index(request):
    articles = DBSession.query(Article).order_by(sa.desc(Article.created))
    return {'articles': articles}

@view_config(route_name='article_action', match_param='action=create', renderer='articles/create.jinja2')
def create(request):
    article = Article()
    form = ArticleCreateForm(request.POST)
    if request.method == 'POST' and form.validate():
        form.populate_obj(article)
        DBSession.add(article)
        return HTTPFound(location=request.route_url('home'))
    return {'form':form, 'action':request.matchdict.get('create')}
from models import DBSession
from models import Category
from wtforms import Form, TextField, TextAreaField, SubmitField, validators
from wtforms.ext.sqlalchemy.fields import QuerySelectField

def Category_choice():
    return DBSession.query(Category.name)

class ArticleCreateForm(Form):
    title = TextField('Title', [validators.required(), validators.length(min=1,max=240)])
    body = TextAreaField('Content', [validators.required()])
    category = QuerySelectField('Category', query_factory=Category_choice())
    submit = SubmitField()
forms.py

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()

class Category(Base):
    __tablename__ = 'categories'
    id = Column(Integer, primary_key=True)
    name = Column(String(100), unique=True, nullable=False)
    description = Column(Text, nullable=False)


class Article(Base):
    __tablename__ = 'articles'
    id = Column(Integer, primary_key=True)
    title = Column(String(255), unique=True, nullable=False)
    body =  Column(Text, nullable=False)
    category = Column(ForeignKey(Category.name), nullable=False)
    created = Column(DateTime, default=datetime.datetime.now)

    @property
    def slug(self):
        return urlify(self.title)

    @property
    def created_in_words(self):
        return time_ago_in_words(Article.created)
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
import sqlalchemy as sa
from blog.forms import ArticleCreateForm

from blog.models import (
    DBSession,
    Article, Category,
    )

@view_config(route_name='home', renderer='articles/index.jinja2')
def index(request):
    articles = DBSession.query(Article).order_by(sa.desc(Article.created))
    return {'articles': articles}

@view_config(route_name='article_action', match_param='action=create', renderer='articles/create.jinja2')
def create(request):
    article = Article()
    form = ArticleCreateForm(request.POST)
    if request.method == 'POST' and form.validate():
        form.populate_obj(article)
        DBSession.add(article)
        return HTTPFound(location=request.route_url('home'))
    return {'form':form, 'action':request.matchdict.get('create')}
from models import DBSession
from models import Category
from wtforms import Form, TextField, TextAreaField, SubmitField, validators
from wtforms.ext.sqlalchemy.fields import QuerySelectField

def Category_choice():
    return DBSession.query(Category.name)

class ArticleCreateForm(Form):
    title = TextField('Title', [validators.required(), validators.length(min=1,max=240)])
    body = TextAreaField('Content', [validators.required()])
    category = QuerySelectField('Category', query_factory=Category_choice())
    submit = SubmitField()

将此行从
query\u factory=Category\u choice()
更改为
query\u factory=Category\u choice

将您的类别选择更改为

def Category_choice():
    return DBSession.query(Category)
你的表格现在是这样的

def Category_choice():
    return DBSession.query(Category)

class ArticleCreateForm(Form):
    title = TextField('Title', [validators.required(), validators.length(min=1,max=240)])
    body = TextAreaField('Content', [validators.required()])
    category = QuerySelectField('Category', query_factory=Category_choice )
    submit = SubmitField()
并在您的类别模型中添加此方法调用

   def __str__(self):
        return self.name
有关详细说明,请参阅


希望能有所帮助。

在询问与错误相关的问题时,请包括完整的堆栈跟踪。目前,我们必须猜测你的错误发生在哪里。而且,我敢打赌,线索就在param的名字里。它应该是query_factory=Category_choice,如no“()”中所示