Python 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

我使用appengine webapp2作为wsgihandler,jinja2作为模板引擎,wtforms作为表单模块,以支持应用引擎模型

以下是我的简单模型:

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">&lt;models.TaskCategory object at 0xb22d74c&gt;</option>
    
    <option value="ahhkZXZ-bmV3LXByb2plY3QtdGVtcGxhdGVyEgsSDFRhc2tDYXRlZ29yeRgDDA">&lt;models.TaskCategory object at 0xb22dbec&gt;</option>
    
    <option value="ahhkZXZ-bmV3LXByb2plY3QtdGVtcGxhdGVyFgsSDFRhc2tDYXRlZ29yeSIEdGVzdAw">&lt;models.TaskCategory object at 0xb22d74c&gt;</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)