Заполнение WTForm FormField в представлении Flask, когда объект не соответствует именам полей формы - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть настройки формы, такие как:

class AddressForm(FlaskForm):
  line1 = StringField()
  city = StringField()
  postcode = StringField()

class PlaceForm(FlaskForm):
  name = StringField()
  address = FormField(AddressForm)

А затем у меня есть просмотр в колбе примерно так:

@bp.route("/places/<ident>", methods=['GET', 'POST'])
def edit_place(ident):
  place = api.get_place(ident)

  form = PlaceForm(obj=place)
  if form.validate_on_submit():
    # do stuff with the form data

  return render_template('place/edit.html', form=form)

api.get_place(ident) возвращает данные, которые не соответствуют форме имен полей в моих Form классах, поэтому мои формы всегда пусты при визуализации в браузере. Например, ответ от API может выглядеть так:

{
  "place": {
    "place_name": "Foobar",
    "address": {
      "address1": "500 5th St",
      "locality": "San Francisco",
      "post_code": "90210"
    }
  }
}

Как настроить код, заполняющий PlaceForm данными при передаче obj?

1 Ответ

0 голосов
/ 21 ноября 2018

Я не могу точно сказать, действительно ли это тот шаблон, который вам нужен.Поскольку edit_place имеет методы GET и POST, действительно ли вы хотите заполнить форму в обоих случаях из функции api.get_place(), возможно перезаписывая данные из запроса?

В любом случае вы можете попробовать что-то вроде следующего:

class PlaceForm(FlaskForm):
    name = StringField()
    address = FormField(AddressForm)
    def __init__(self, *kwargs):
        super().__init__()
        self.address, self.name = # some code to populate with data from kwargs
...