Python 如何将查询结果发送到WTForm字段?
我使用SQLalchemy和多对多表来管理博客文章标记。我需要帮助将标记值呈现到一个TextArea表单字段中,在那里可以编辑它们。现在,当我渲染时,我看到了查找查询 型号 标记和Post之间的关系在“标记”中定义Python 如何将查询结果发送到WTForm字段?,python,flask,sqlalchemy,wtforms,flask-wtforms,Python,Flask,Sqlalchemy,Wtforms,Flask Wtforms,我使用SQLalchemy和多对多表来管理博客文章标记。我需要帮助将标记值呈现到一个TextArea表单字段中,在那里可以编辑它们。现在,当我渲染时,我看到了查找查询 型号 标记和Post之间的关系在“标记”中定义 class Tag(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), unique=True) url = db.Column(db.String(120),
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), unique=True)
url = db.Column(db.String(120), unique=True)
def __init__(self, name, url):
self.name = name
self.url = url
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80))
body = db.Column(db.Text)
pub_date = db.Column(db.DateTime)
tags = db.relationship('Tag', secondary=posts_tags, backref='posts', lazy='dynamic')
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), unique=True)
url = db.Column(db.String(120), unique=True)
我的问题是在WTF中呈现标记字段。我在字段中显示查询,而不是结果
我看到了两个解决方案,但我都不知道怎么做
a、 )在视图中,通过标记交互并显示值。
b、 )在自定义字段中,在呈现字段之前,以某种方式传递post id并运行a查询。比如,这个
有效的现场黑客,但知道如何动态地将帖子ID传递给现场。*
class TagListField(Field):
widget = TextArea()
def _value(self):
q = Post.query.join(posts_tags, (posts_tags.c.post_id == {{ NEED HELP HERE}}))
taglist = []
for p in q:
for t in p.tags:
taglist.append(t.name)
taglist
return ", ".join(taglist)
def process_formdata(self, valuelist):
if valuelist:
self.data = [x.strip() for x in valuelist[0].split(',')]
else:
self.data = []
要查看视图和字段选项。。。感谢并预告…您使用的_值不正确,它用于显示数据,而不是设置数据 数据设置在表单上,而不是字段上
class TagListField(Field):
widget = TextInput()
def _value(self):
if self.data:
return u', '.join(self.data)
else:
return u''
def process_formdata(self, valuelist):
if valuelist:
self.data = [x.strip() for x in valuelist[0].split(',')]
else:
self.data = []
class PostForm(Form):
title = StringField(u'title', validators=[DataRequired()])
body = StringField(u'Text', widget=TextArea())
pub_date = DateTimeField(u'date create')
topic = QuerySelectField(query_factory=enabled_topics, allow_blank=True)
tags = TagListField(u'Tags') # here you use your custom field
# a method to set the tags
def fill_tags(self, tags):
self.tags.data = tags
# and from the view that is creating the form you send the list of tags
在你看来:
form = PostForm()
form.fill_tags([tag.name for tag in post.tags.all()])
您使用的_值不正确,它用于显示数据,而不是设置数据 数据设置在表单上,而不是字段上
class TagListField(Field):
widget = TextInput()
def _value(self):
if self.data:
return u', '.join(self.data)
else:
return u''
def process_formdata(self, valuelist):
if valuelist:
self.data = [x.strip() for x in valuelist[0].split(',')]
else:
self.data = []
class PostForm(Form):
title = StringField(u'title', validators=[DataRequired()])
body = StringField(u'Text', widget=TextArea())
pub_date = DateTimeField(u'date create')
topic = QuerySelectField(query_factory=enabled_topics, allow_blank=True)
tags = TagListField(u'Tags') # here you use your custom field
# a method to set the tags
def fill_tags(self, tags):
self.tags.data = tags
# and from the view that is creating the form you send the list of tags
在你看来:
form = PostForm()
form.fill_tags([tag.name for tag in post.tags.all()])
您使用的_值不正确,它用于显示数据,而不是设置数据 数据设置在表单上,而不是字段上
class TagListField(Field):
widget = TextInput()
def _value(self):
if self.data:
return u', '.join(self.data)
else:
return u''
def process_formdata(self, valuelist):
if valuelist:
self.data = [x.strip() for x in valuelist[0].split(',')]
else:
self.data = []
class PostForm(Form):
title = StringField(u'title', validators=[DataRequired()])
body = StringField(u'Text', widget=TextArea())
pub_date = DateTimeField(u'date create')
topic = QuerySelectField(query_factory=enabled_topics, allow_blank=True)
tags = TagListField(u'Tags') # here you use your custom field
# a method to set the tags
def fill_tags(self, tags):
self.tags.data = tags
# and from the view that is creating the form you send the list of tags
在你看来:
form = PostForm()
form.fill_tags([tag.name for tag in post.tags.all()])
您使用的_值不正确,它用于显示数据,而不是设置数据 数据设置在表单上,而不是字段上
class TagListField(Field):
widget = TextInput()
def _value(self):
if self.data:
return u', '.join(self.data)
else:
return u''
def process_formdata(self, valuelist):
if valuelist:
self.data = [x.strip() for x in valuelist[0].split(',')]
else:
self.data = []
class PostForm(Form):
title = StringField(u'title', validators=[DataRequired()])
body = StringField(u'Text', widget=TextArea())
pub_date = DateTimeField(u'date create')
topic = QuerySelectField(query_factory=enabled_topics, allow_blank=True)
tags = TagListField(u'Tags') # here you use your custom field
# a method to set the tags
def fill_tags(self, tags):
self.tags.data = tags
# and from the view that is creating the form you send the list of tags
在你看来:
form = PostForm()
form.fill_tags([tag.name for tag in post.tags.all()])
是的,你完全正确!非常感谢。是的,你完全正确!非常感谢。是的,你完全正确!非常感谢。是的,你完全正确!非常感谢你。