WTForms отображает имя поля внешнего ключа в раскрывающемся списке

Я использую 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>

Как видно, имена не отображаются для категории, вместо этого отображаются объекты, как я могу исправить это в общем виде?


person user993563    schedule 23.06.2012    source источник


Ответы (1)


Ну, это не имеет ничего общего ни с WTForm, ни с jinja, ни с webapp2. Измените файл базы данных, чтобы вернуть заголовок в вашем случае вместо объекта, используя repr следующим образом:

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

    def __repr__(self):
        return unicode(self.title)
person apcelent    schedule 23.06.2012