2012-06-23 5 views
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() 

: 다음

내 간단한 모델이다

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

모든 것이 완벽하게 렌더링 :

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()}) 

에 이어 내 템플릿입니다 템플릿, 외래 키에 대한 드롭 다운을 제외하고 거기에 나열된 값은 다음과 같습니다 :

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

마찬가지로 이름이 범주에 표시되지 않고 개체가 표시되지만 어떻게 수정 할 수 있습니까?

답변

3

글쎄, WTForm 또는 jinja 또는 webapp2와 관련이 없습니다. 다음과 같이 repr을 사용하는 개체 대신 사례의 제목을 반환하도록 데이터베이스 파일을 변경하십시오.

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

    def __repr__(self): 
     return unicode(self.title)