【问题标题】:flask-admin ModelView custom create_formflask-admin ModelView 自定义 create_form
【发布时间】:2014-04-24 03:52:19
【问题描述】:

我正在我的烧瓶管理员中创建一个自定义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

供应商选择字段给我一个Not a valid choice 验证错误。

我做错了什么?

【问题讨论】:

    标签: flask flask-wtforms flask-admin


    【解决方案1】:

    可能是因为你别无选择?

    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)
    

    【讨论】:

      【解决方案2】:

      如果你想从你的供应商表中提取你的选择,那么你需要一个来自 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
      

      【讨论】:

        猜你喜欢
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-05
        相关资源
        最近更新 更多