Flask, WTForms: ошибка при редактировании и создании правил формы - PullRequest
0 голосов
/ 30 декабря 2018

Я использую Flask и WTForms в веб-приложении.У меня есть db.Model, форма и sqla.ModelView, как это:

class Users(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.INTEGER, primary_key=True)
    name = db.Column(db.String, nullable=False)
    last_name = db.Column(db.String, nullable=False)

class UsersForm(form.Form):
    id = fields.IntegerField('Id')
    name = fields.StringField('Name')
    last_name = fields.StringField('Last Name')

class UsersAdmin(sqla.ModelView):
    column_list = ['id', 'name', 'last_name']
    form = UsersForm
    form_create_rules = column_list
    form_edit_rules = ['name', 'last_name']

Но это не работает, потому что эта ошибка:

ValueError: Form <__main__.UsersForm object at 0x7f5039c48710> does not have field name

Однако, когда form_edit_rulesсоответствует правилам form_create, работает отлично!

1 Ответ

0 голосов
/ 02 января 2019

Я обнаружил в издательстве github flask-admin, что правила формы _ * _ влияют только на отображение формы, но не влияют на саму форму.

Создание экземпляра формы в flask-admin не обязательно.Я бы порекомендовал, чтобы ваша база данных позаботилась об идентификаторе, так как он автоматически автоматически увеличивается.По моему опыту, flask-admin даже не показывает поле id.

Если вы действительно хотите иметь редактируемое поле id только в форме создания, вы можете сделать поле доступным только для чтения в форме редактирования с помощьюследующий код:

class UsersAdmin(sqla.ModelView):
    def on_form_prefill(self, form, id):
        form.id.render_kw = {'readonly': True}

    column_list = ['id','name','last_name']
    form = UsersForm
...