2017-01-23 9 views
0

WTForms를 사용하여 Select Field를 미리 채우려합니다. 데이터베이스의 데이터를 사용하여 선택 필드 (값 및 레이블)를 미리 채우고 싶습니다.Pre-populate (Query) SelectField - WTForms?

데이터베이스 :

+----+----------+-------------------------------------+--------+ 
| id | category | description       | status | 
+----+----------+-------------------------------------+--------+ 
| 1 | Cinema | About movies      |  1 | 
| 2 | Play  | About music.      |  0 | 
| 3 | News  | Breaking news      |  1 | 
+----+----------+-------------------------------------+--------+ 

나는이에 QuerySelectField 동등합니다 :

class MyForm(Form): 
    category = SelectField(u'Category', choices=[('1', 'Cinema'), ('3','News')]) 

지금까지 이런 짓을했습니다

def getCategories(): 
    return Category.query.filter_by(status=1).all() 

class MyForm(Form): 
    category = QuerySelectField(u'Category', 
      [validators.Required()], 
      query_factory = getCategories 
      ) 

레이블이 같은 렌더링 this :

<select class="form-control" id="category" name="category"> 
<option value="1">&lt;models.Category object at 0x105064910&gt;</option> 
<option value="3">&lt;models.Category object at 0x105064d50&gt;</option> 
</select> 

답변

1

난 당신이 그들이 그것을 simpe crud app with forms

을 사용하여 더이 멋진 turorial을 찾을 수 있습니다 양식 이 코드

categorie=QuerySelectField(query_factory=lambda:Category.query.filter_by(status=1).all(),get_label="name")

을 시도 할 수 있다고 생각

1

괜찮습니다. QuerySelectField는 Model 객체의 문자열 표현을 사용하여 표시합니다. 범주 이름을 반환하는 범주 모델에 __str__ 함수를 추가하기 만하면됩니다.

def __str__(self): 
    return self.name