在我的类RequestView(ModelView)中:我有...
form_edit_rules = (
rules.FieldSet(('name', 'email', 'phone','shopname', 'invoice', 'territory'), 'Customer Information'),
rules.FieldSet(('address', 'address2', 'city','state','zipcode'), 'Shipping Information'),
rules.FieldSet(('carrier','num_labels','shipping_label_url', 'shipping_tracking_num', 'shipping_label_url_2', 'shipping_tracking_num_2', 'shipping_label_url_3', 'shipping_tracking_num_3', 'shipping_label_url_4', 'shipping_tracking_num_4'), 'Shipping Labels / Tracking'),
rules.FieldSet(('created','reason', 'status', 'sales_attention_comments', 'message', 'customer_notes','salesperson'), 'Return Information'),
rules.FieldSet(('pdffile','credit','audit_reason', 'audit_detail','light_plan','shipping_territory', 'notes','completed'), 'Auditor Fields')
)
由于某种原因,包含“电话”的操作将其丢弃并导致此错误:
ValueError:0x11007bc88处的Form flask_admin.contrib.sqla.form.RequestForm对象没有现场电话
如果我删除手机,它就可以正常工作。
我在模型中声明了以下电话:
phone = db.Column(PhoneNumberType())
请注意,我有一个自定义的前端表单,可以将数据保存到电话字段中。只有管理员编辑表单的这种修改才会引发错误。
答案 0 :(得分:0)
可能是由于PhoneNumberType
字段的复杂性,flask-admin不知道如何呈现其小部件,因此表单上缺少它。
尝试将其作为StringField
中的form_extra_fields
和form_edit_rules
一起添加,如下所示:
from wtforms.fields import StringField
class RequestView(ModelView):
form_extra_fields = {
'phone': StringField('phone')
}
form_edit_rules = (
rules.FieldSet(('name', 'email', 'phone','shopname', 'invoice', 'territory'), 'Customer Information'),
rules.FieldSet(('address', 'address2', 'city','state','zipcode'), 'Shipping Information'),
rules.FieldSet(('carrier','num_labels','shipping_label_url', 'shipping_tracking_num', 'shipping_label_url_2', 'shipping_tracking_num_2', 'shipping_label_url_3', 'shipping_tracking_num_3', 'shipping_label_url_4', 'shipping_tracking_num_4'), 'Shipping Labels / Tracking'),
rules.FieldSet(('created','reason', 'status', 'sales_attention_comments', 'message', 'customer_notes','salesperson'), 'Return Information'),
rules.FieldSet(('pdffile','credit','audit_reason', 'audit_detail','light_plan','shipping_territory', 'notes','completed'), 'Auditor Fields')
)
电话字段的验证已保留,所以我想它将解决您的问题。