【发布时间】:2014-09-04 19:08:21
【问题描述】:
我已经通过 Stackoverflow / Google 上的各种教程 + 搜索,但未能找到一些关于如何使用 QuerySelectField 使用几个 Flask 蓝图的答案,也许你可以提供帮助。 基本上,我在我的 models.py 中定义了一个 Project 类和一个 Client 类,如下所示:
class Project(db.Model):
__tablename__ = 'projects'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(128), nullable=False)
description = db.Column(db.Text)
client_id = db.Column(db.Integer, db.ForeignKey('clients.id'))
class Client(db.Model):
__tablename__ = 'clients'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
location = db.Column(db.Text, nullable=False)
projects = db.relationship('Project', lazy='dynamic', backref='project')
然后,我为每个部分制定了蓝图,一张用于管理我的项目,另一张用于我的客户。 然后,当我尝试使用 QuerySelectField 在我的项目表单中检索客户名称时,我遇到了困难,这是我目前在我的项目/forms.py 中所拥有的:
from flask.ext.wtf import Form
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.validators import Length, Required
from wtforms.fields.html5 import DateField
class ProjectForm(Form):
title = StringField('Title', validators=[Required(), Length(1, 128)])
description = TextAreaField('Desciption')
date = DateField('Date', format='%d/%m/%Y')
client_id = QuerySelectField('Select Client', validators=[Required()], coerce=int, choices = [(1, 'abc'), (2, 'defg'), (3, 'hij')])
submit = SubmitField('Submit')
def from_model(self, project):
self.title.data = project.title
self.description.data = project.description
self.client_id.data = project.client_id
self.date.data = project.date
def to_model(self, project):
project.title = self.title.data
project.description = self.description.data
project.client_id = self.client_id.data
project.date = self.date.data
我知道这个版本没有选择任何客户端,因为我正在传递静态数据 i/o 动态数据,但至少它可以工作,并且我可以看到我的 SelectField 具有可能的值。我读过我应该使用类似
client_id = QuerySelectField('Select Client', query_factory=lambda: Client.query.all())
并且还建议在“class ProjectForm(Form)”之前先声明如下内容:
def client_id():
return Client.query.filter_by(enabled=True)
在所有情况下,我最终都会遇到 NameError: name 'Client' is not defined,我知道我必须在某个地方说程序应该查看我的类 Client,但我找不到在哪里,除非问题出在某个地方别的。 提前感谢您的帮助。
【问题讨论】:
标签: flask