Python WTForms显示外键字段';下拉列表中的名称
我使用appengine webapp2作为wsgihandler,jinja2作为模板引擎,wtforms作为表单模块,以支持应用引擎模型 以下是我的简单模型:Python WTForms显示外键字段';下拉列表中的名称,python,google-app-engine,jinja2,webapp2,wtforms,Python,Google App Engine,Jinja2,Webapp2,Wtforms,我使用appengine webapp2作为wsgihandler,jinja2作为模板引擎,wtforms作为表单模块,以支持应用引擎模型 以下是我的简单模型: class TaskCategory(db.Model): title = db.StringProperty() description = db.TextProperty() class TaskList(db.Model): title = db.StringProperty() descri
class TaskCategory(db.Model):
title = db.StringProperty()
description = db.TextProperty()
class TaskList(db.Model):
title = db.StringProperty()
description = db.TextProperty()
category = db.ReferenceProperty(TaskCategory)
start_date = db.DateProperty()
target_finish_date = db.DateProperty()
在我的处理程序中,我编写了如下内容:
from wtforms.ext.appengine.db import model_form
model_dict = {'category': TaskCategory,
'task': TaskList}
class CreateForm(webapp2.RequestHandler):
def get(self, slug):
form = model_form(model_dict[slug]) # slug can either be category or task.
self.render_template('index.html', {'form': form()})
class TaskCategory(db.Model):
title = db.StringProperty()
description = db.TextProperty()
def __repr__(self):
return unicode(self.title)
以下是我的模板:
<form method="POST" action"">
<table>
{% for field in form %}
<tr>{{ field.label }}</tr>
<tr>{{ field()|safe }}</tr>
<tr>
{% if field.errors %}
<td>
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</td>
{% endif %}
{% endfor %}
</table>
<input type="submit" class="btn" value="Submit Form"/>
</form>
{%形式的字段为%}
{{field.label}
{{field()| safe}}
{%if field.errors%}
{%字段中有错误。错误%}
- {{error}}
{%endfor%}
{%endif%}
{%endfor%}
模板中的所有内容都能完美呈现,除了外键的下拉列表,上面列出的值类似于:
<tr><label for="category">Category</label></tr>
<tr><select id="category" name="category"><option selected value="__None"></option><option value="ahhkZXZ-bmV3LXByb2plY3QtdGVtcGxhdGVyEgsSDFRhc2tDYXRlZ29yeRgCDA"><models.TaskCategory object at 0xb22d74c></option>
<option value="ahhkZXZ-bmV3LXByb2plY3QtdGVtcGxhdGVyEgsSDFRhc2tDYXRlZ29yeRgDDA"><models.TaskCategory object at 0xb22dbec></option>
<option value="ahhkZXZ-bmV3LXByb2plY3QtdGVtcGxhdGVyFgsSDFRhc2tDYXRlZ29yeSIEdGVzdAw"><models.TaskCategory object at 0xb22d74c></option></select></tr>
类别
0xb22d74c处的models.TaskCategory对象
0xb22dbec处的models.TaskCategory对象
0xb22d74c处的models.TaskCategory对象
可见,类别的名称没有显示,而是显示了对象,我如何才能以一般方式纠正它?这与WTForm、jinja或webapp2无关。 更改数据库文件以返回案例中的标题,而不是使用
repr
返回对象,如下所示:
from wtforms.ext.appengine.db import model_form
model_dict = {'category': TaskCategory,
'task': TaskList}
class CreateForm(webapp2.RequestHandler):
def get(self, slug):
form = model_form(model_dict[slug]) # slug can either be category or task.
self.render_template('index.html', {'form': form()})
class TaskCategory(db.Model):
title = db.StringProperty()
description = db.TextProperty()
def __repr__(self):
return unicode(self.title)