2017-01-23 14 views
0

Я пытаюсь предварительно заполнить поле «Выбрать», используя WTForms. Я хочу предварительно заполнить поле выбора (значение и метку), используя данные из базы данных.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 
      ) 

Этикетки визуализируются как это:

<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__ в модель вашей категории, которая возвращает название категории.

def __str__(self): 
    return self.name 

 Смежные вопросы

  • Нет связанных вопросов^_^