【问题标题】:WTForms display foreignkey fields' name in dropdownWTForms 在下拉列表中显示外键字段的名称
【发布时间】:2012-06-25 11:20:38
【问题描述】:

我使用 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>

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

【问题讨论】:

    标签: python google-app-engine jinja2 webapp2 wtforms


    【解决方案1】:

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

    class TaskCategory(db.Model):
        title = db.StringProperty()
        description = db.TextProperty()
    
        def __repr__(self):
            return unicode(self.title)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2020-05-14
      • 2013-09-15
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多