使用WTForms的新手,我不知道如何显示其他表单字段,如下所示:https://css-tricks.com/exposing-form-fields-radio-button-css/
由于单选字段在提供字段列表的地方具有choices参数,是否有任何方法可以自定义每个选项?选择不同的选择时会暴露出不同的东西吗?
答案 0 :(得分:0)
这将是python和javascript代码的组合。
有 2种常见解决方案:
您可以创建一条路线:
@app.route("/api/choices", methods=["GET"])
def my route:
custom_choices = get_custom_choices()
return jsonify(custom_choices)
然后在您的JavaScript代码中,当用户单击按钮时,您会请求此路线以获取自定义选项。
然后,当您检查/验证发送的表单时,按照此处WTForms文档中的描述,使用自定义选项(在示例中为get_custom_choice)填充字段的选择:
请注意,choices关键字仅被评估一次,因此如果需要 要创建动态下拉列表,您需要分配选择 实例化后列出到字段。任何提交的选择是 不在给定的选项列表中将导致在现场验证 失败。如果此选项无法应用于您的问题,您可能希望 跳过选择验证(见下文)。
使用动态选择值选择字段:
class UserDetails(Form): group_id = SelectField('Group', coerce=int) def edit_user(request, id): user = User.query.get(id) form = UserDetails(request.POST, obj=user) form.group_id.choices = [(g.id, g.name) for g in Group.query.order_by('name')]
请注意,我们没有将选择传递给SelectField构造函数,但是 而是在查看功能中创建了列表。还有,coerce关键字 SelectField的arg表示我们使用int()强制转换表单数据。的 默认强制为str()。
第二种解决方案需要做更多的工作,但要轻巧一些,取决于您选择的可能性。 (我认为:更清洁)。