WTForms QuerySelectMultipleField Не отправляет список

Я работаю над приложением Flask для планирования некоторых событий. У меня проблемы с WTForms QuerySelectMultipleField в моей форме.

формы.py

class EnterEvent(Form):
...
invitees = QuerySelectMultipleField('Invitees', query_factory=lambda:
                            models.User.query.order_by(models.User.name).all())

и в моем файле init.py, где я анализирую данные формы POST. Просто для проверки я попытался вернуть request.form['invitees'] просто чтобы посмотреть, что было передано. В конце концов я хочу проверить данные и добавить их в свою базу данных SQLite3.

@app.route('/event', methods=['POST', 'GET'])
def addEvent():
    form = EnterEvent()
    if request.method == 'POST':
        ...
        invitees = request.form['invitees']
        return invitees

документы WTForm говорят, что QuerySelectMultipleField должен возвращать список с экземплярами модели ORM, но когда я анализирую запрос POST, я не получаю список. Я проверил данные POST в своем браузере, и похоже, что когда я выбираю несколько объектов, он отправляет более одного.

Я не могу понять это. Любая помощь будет оценена!


person Ptrkcon    schedule 06.07.2013    source источник


Ответы (1)


Вы получите свои экземпляры модели ORM, если запросите свой объект form напрямую, а не «сырые» данные формы, которые являются частью объекта запроса.

Предполагая, что вы используете Flask-WTF с его маленькими помощниками, ваша строка invitees должна действительно читаться как invitees = form.invitees.data.

person Doobeh    schedule 07.07.2013
comment
Благодарю вас! Я не знал, что вы можете получить экземпляры ORM из формы запроса. Я думал, что вы можете анализировать только необработанные данные POST. Это огромная помощь. - person Ptrkcon; 09.07.2013
comment
Почему бы вам не использовать тот же метод для получения всех полей из формы вместо получения «сырых» данных, таких как request.form['whatever']? - person Ptrkcon; 09.07.2013
comment
Вы всегда должны использовать соглашение form.field_name.data, иначе вы на самом деле не используете преимущества WTForms. В идеале вы действительно должны делать if form.validate_on_submit(): вместо if request.method == 'POST', потому что первый фактически использует любую проверку wtf, которую вы настроили для данных формы. - person Doobeh; 10.07.2013