Динамическая проверка SelectField завершается с ошибкой: недопустимый выбор

Вот мой код, я не могу пройти мимо «недопустимого выбора» в SelectField, будь то в форме создания или редактирования... Категории, которые я передаю как варианты, являются юникодом, даже если я пытался различные «принудительные» настройки в форме SelectField

class ProductsView(MyModelView):
create_template = '/admin/edit-products.html'
form = ProductForm

def create_form(self, model=None):
    form = self.form()
    choices = list(db.db.categories.find())
    choices.sort(key=lambda x: x['order'])
    sorted_choices = [(str(cat['name']), cat['name']) for cat in choices]
    print sorted_choices
    form.category.choices = sorted_choices
    if model:
        form.name.data = model['name']
        form.order.data = int(model['order'])
    return form

    def edit_form(self, obj):
    try:
        pk = self.get_pk_value(obj)
        if not pk:
            raise ValueError('Document does not have _id')
        model = db.db.products.find_one(pk)
        form = self.create_form(model)
        return form
    except Exception as ex:
        print ex
        flash(gettext('Failed to edit product. %(error)s', error=str(ex)),
              'error')

person Luca Brozzi    schedule 25.02.2015    source источник


Ответы (1)


Вы можете создать свой собственный SelectField и перезаписать метод pre_validate. Как это:

class MySelectField(SelectField):

    def pre_validate(self, form):
        for v, _ in self.choices:
            if your validation:
                break
        else:
            raise ValueError(self.gettext('Not a valid choice'))
person Robson Ventura Rodrigues    schedule 03.11.2015