Flask-WTForms — простой пример CRUD — значение, не заполняющее форму

Я прочитал все учебники и часть документации, которую смог найти, но не могу найти свою проблему. Я сделал это максимально простым, используя в качестве примера «компании». Когда я загружаю URL-адрес /company/edit/2, форма не заполняет значение.

Посмотреть

@app.route('/company/edit/<id>')
def company_edit(id):
  company = {'id': 2, 'company_name': 'SomeCo'} #dummy object
  form = CompanyForm(obj=company)
  #form = CompanyForm(None, company) #tried this too, based on API
  return render_template('company_form.html', form = form)

объект формы

class CompanyForm(Form):
  company_name = TextField('company_name', validators = [Required()])

шаблон формы

<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}

<form action="" method="post" name="login">
    {{form.hidden_tag()}}
    <p>
        Company Name:<br>
        {{form.company_name(size=80)}}<br>
    </p>
    <p><input type="submit" value="Sign In"></p>
</form>

{% endblock %}

я понимаю, что это должно работать - маршрут /company/edit/x вызовет company_edit(x), который объявляет фиктивный объект компании (позже будет извлечен из базы данных), создает экземпляр формы, передавая объект компании, затем отображает шаблон, передающий форму. Шаблон формы должен иметь возможность сопоставлять имена полей в объекте компании с соответствующими входными именами в объекте формы и заполнять текстовое поле значением "SomeCo". Я упускаю что-то очевидное?

Спасибо!


person David    schedule 26.05.2013    source источник


Ответы (1)


Ключевое слово obj, передаваемое экземпляру WTForms, должно иметь свойства, а не ключи (другими словами, оно должно отвечать на __getattr__, а не на __getitem__). Если вы хотите передать объект, похожий на словарь, в свой Form, вам нужно использовать оператор splat (**), чтобы передать свой словарь в качестве аргументов ключевого слова:

form = CompanyForm(**company)
person Sean Vieira    schedule 26.05.2013
comment
Я знал, что это что-то простое. Спасибо! - person David; 26.05.2013