flask admin ModelView自定义创建表单

flask admin ModelView自定义创建表单,flask,flask-wtforms,flask-admin,Flask,Flask Wtforms,Flask Admin,我正在flask admin中创建一个自定义的UserViewCreateForm(使用wtforms),如下所示:- from app.vendors.models import Vendor class UserViewCreateForm(form.Form): username = fields.TextField('Username') first_name = fields.TextField('First Name') last_name = fields

我正在flask admin中创建一个自定义的
UserViewCreateForm
(使用wtforms),如下所示:-

from app.vendors.models import Vendor

class UserViewCreateForm(form.Form):
    username = fields.TextField('Username')
    first_name = fields.TextField('First Name')
    last_name = fields.TextField('Last Name')
    email = fields.TextField('Email')
    contact_number = fields.TextField('Contact Number')
    password = fields.PasswordField('Password')
    is_admin = fields.BooleanField('Is Admin')
    is_active = fields.BooleanField('Is Active')
    is_verified = fields.BooleanField('Is Verified')
    vendor = fields.SelectField('Vendor', coerce=int)


class UserView(ModelView):
    form_overrides = dict(title=SelectField)
    form_args = dict(
        # Pass the choices to the `SelectField`
        title=dict(
            choices=TITLE_TYPE
        ))

    def __init__(self, session, **kwargs):
        super(UserView, self).__init__(User, session, **kwargs)

    def is_accessible(self):
        return login.current_user.is_authenticated()

    def create_form(self):
        form = UserViewCreateForm()
        form.vendor.choices = [(0, '')] + [(v.id, v.name) for v in Vendor.query.all()]
        return form
供应商选择字段给了我一个
无效的选择
验证错误


我做错了什么?可能是因为你别无选择

CA_STATES = [
    ('', 'Province'),
    ('AB', 'Alberta'),
    ('BC', 'British Columbia'),
    ('MB', 'Manitoba'),
    ('NB', 'New Brunswick'),
    ('NL', 'Newfoundland and Labrador'),
    ('NS', 'Nova Scotia'),
    ('ON', 'Ontario'),
    ('PE', 'Prince Edward Island'),
    ('QC', 'Quebec'),
    ('SK', 'Saskatchewan'),
    ('NT', 'Northwest Territories'),
    ('NU', 'Nunavut'),
    ('YT', 'Yukon'),
]

state_ca = SelectField('Province', choices=CA_STATES)

如果要从供应商表中提取选择,则需要wtforms.ext.sqlalchemy中的QuerySelectField(wtforms 3.0之前-3.0之后,它现在是一个单独的wtforms sqlalchemy包)

from app.vendors.models import Vendor
from wtforms.ext.sqlalchemy import QuerySelectField

class UserViewCreateForm(form.Form):
    username = fields.TextField('Username')
    first_name = fields.TextField('First Name')
    last_name = fields.TextField('Last Name')
    email = fields.TextField('Email')
    contact_number = fields.TextField('Contact Number')
    password = fields.PasswordField('Password')
    is_admin = fields.BooleanField('Is Admin')
    is_active = fields.BooleanField('Is Active')
    is_verified = fields.BooleanField('Is Verified')
    vendor = QuerySelectField('Vendor')

class UserView(ModelView):

    def create_form(self):
        form = UserViewCreateForm()
        form.vendor.query = Vendor.query.all()
        return form