2017-01-23 98 views
0

我想使用WTForms预填充选择字段。 我想使用数据库中的数据预先填充选择字段(值和标签)。预填充(查询)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 
      ) 

标签会以类似这个:

<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

我想你可以试试这个代码

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

在窗体 你可以找到更多这真棒turorial他们用它simpe crud app with forms

1

你做得很好。 QuerySelectField使用您的Model对象的字符串表示来显示。只需将__str__函数添加到返回类别名称的Category类型中即可。

def __str__(self): 
    return self.name