[英]Flask Wtforms FieldList(FormField to populate a SelectField with choices is not appending to form
我正在嘗試使用 str 和列表的組合填充表單。 表單中的字符串字段填充沒有問題。 但是,表單中的選擇字段似乎只顯示它收到的列表中給出的最后一個條目,就好像它覆蓋了表單中的先前內容一樣。
如果列表(后來轉換為元組)是:[['one@email.com', 'two@email.com'], ['one@2email.com', 'two@2email.com]]
整個表單中的選項中顯示的內容將是:
一個@2email.com 兩個@2email.com
我已經嘗試了各種迭代,但到目前為止沒有運氣。
class BulkAddFields(Form):
ip_addr = StringField(label='ip_addr')
dom_emails = StringField('dom_emails')
new_emails = SelectField('new_emails', coerce=int)
class BulkAddForm(FlaskForm):
incidents = FieldList(FormField(BulkAddFields))
submit = SubmitField('Submit')
form = BulkAddForm()
# i = str, d = str, n=list
for i, d, n, in data:
form.ip_addr = i
form.dom_emails = d
form.incidents.append_entry(form)
email = list(enumerate(n))
for sub_form in form.incidents:
sub_form.new_emails.choices = email
我添加了一個圖片/鏈接,顯示了字符串字段如何按預期復制到頁面下方,但選擇字段僅復制列表中的最后一項。
嘗試從
new_emails = SelectField('new_emails', coerce=int)
至
new_emails = SelectField('new_emails', coerce=str)
然后,您應該能夠將選擇作為列表傳遞。 讓我知道這是否有幫助。
下面是最終工作的代碼。 雖然我不喜歡每次都向表單添加一個字段,但我知道每次我想將它包含在 BulkAddFields 中時都會存在該字段,但不知道如何。
class BaseForm(FlaskForm):
@classmethod
def append_field(cls, name, field):
setattr(cls, name, field)
return cls
class BulkAddFields(BaseForm):
ip_addr = StringField(label='ip_addr')
dom_emails = StringField('dom_emails')
class BulkAddForm(BaseForm):
incidents = FieldList(FormField(BulkAddFields))
submit = SubmitField('Submit')
form = BulkAddForm()
for i, d, n, in data:
email = list(enumerate(n))
bulkfields = BulkAddFields()
bulkfields = bulkfields.append_field('new_emails',
SelectField('New Emails', choices=email))
form.ip_addr = i
form.dom_emails = d
form.incidents.append_entry(form)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.