python - Flask,WTForms:编辑和创建表单规则时出错
问题描述
我在 Web 应用程序中使用 Flask 和 WTForms。我有一个 db.Model、一个表单和一个 sqla.ModelView,如下所示:
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.INTEGER, primary_key=True)
name = db.Column(db.String, nullable=False)
last_name = db.Column(db.String, nullable=False)
class UsersForm(form.Form):
id = fields.IntegerField('Id')
name = fields.StringField('Name')
last_name = fields.StringField('Last Name')
class UsersAdmin(sqla.ModelView):
column_list = ['id', 'name', 'last_name']
form = UsersForm
form_create_rules = column_list
form_edit_rules = ['name', 'last_name']
但它不起作用,因为这个错误:
ValueError: Form <__main__.UsersForm object at 0x7f5039c48710> does not have field name
但是,当 form_edit_rules 等于 form_create 规则时,它可以完美运行!
解决方案
我在 flask-admin github issuelist 上发现 form_*_rules 只影响表单的显示方式,但不影响表单本身。
不需要在 flask-admin 中创建表单实例。我建议让您的数据库处理 id,因为它会自动递增。根据我的经验,flask-admin 甚至不显示 id 字段。
如果您真的只想在创建表单上有一个可编辑的 id 字段,您可以使用以下代码在编辑表单上将该字段设为只读:
class UsersAdmin(sqla.ModelView):
def on_form_prefill(self, form, id):
form.id.render_kw = {'readonly': True}
column_list = ['id','name','last_name']
form = UsersForm
推荐阅读
- arrays - 如果两个数组的内容彼此不同,为什么这两个数组之间的比较不起作用?
- c# - ASP.NET - 无法取消保护 message.State 只有一个回调
- javascript - 如何使 div 在反应中自动滚动(钩子)
- python-3.x - 重新格式化数据帧以显示分组后的序列号和时间差
- sql - 在逗号分隔列表的末尾添加“和”
- blazor - Blazor + 条件 HTML 注释
- css - 如何添加/删除字体真棒图标
- haskell - 有没有办法在 Haskell QuickCheck 中生成用于测试的值?
- angular - ngx-image-zoom 设置最大宽度和高度
- r - htmltools::validateCssUnit(width) 中的错误:CSS 单位必须是单元素数字或字符向量!?!?瑞希尼