2

我使用 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()})

以下是我的模板:

<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>

一切都在模板中完美呈现,除了外键的下拉列表,其中列出的值类似于:

    <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>

可见,类别的名称没有显示,而是显示了对象,我该如何以通用方式纠正它?

4

1 回答 1

3

好吧,这与 WTForm 或 jinja 或 webapp2 无关。更改您的数据库文件以在您的情况下返回标题,而不是使用repr如下对象:

class TaskCategory(db.Model):
    title = db.StringProperty()
    description = db.TextProperty()

    def __repr__(self):
        return unicode(self.title)
于 2012-06-23T10:10:00.753 回答