flask-admin ModelView пользовательская форма create_form

Я создаю пользовательский UserViewCreateForm (используя wtforms) в своем flask-admin следующим образом: -

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

Поле выбора поставщика дает мне ошибку проверки Not a valid choice.

Что я делаю неправильно?


person Calvin Cheng    schedule 24.04.2014    source источник


Ответы (2)


Может, потому что у тебя нет выбора?

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)
person user3006981    schedule 17.04.2015

Если вы хотите получить свой выбор из таблицы поставщиков, вам нужен QuerySelectField из wtforms.ext.sqlalchemy (до 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
person ehambright    schedule 15.08.2016