2

私はappenginewebapp2を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 に答える