2016-01-15 3 views
0

Я использую Flask с WTForms и SQLAlchemy. Я в настоящее время имеют это установить:Передайте данные формы непосредственно объекту SQLalchemy?

SQLAlchemy класс:

class User(Base): 
    __tablename__ = 'user' 
    name = db.Column(db.String) 
    last_name = db.Column(db.String) 

    __init__(name, last_name): 
     self.name = name 
     self.last_name = last_name 

Соответствующая форма:

class CreateUserForm(Form): 
    name = StringField('Name') 
    last_name = StringField('Last name') 

И маршрут:

@user.route('/', methods=['POST']) 
def create(): 
    form = CreateUserForm(request.form) 

    if form.validate(): 
     user = User(form.name.data, form.last_name.data) 
     ... 

Это просто упрощенный пример но я задаюсь вопросом, могу ли я как-то просто передать переменную формы в конструктор User и все путь к классу User в SQLAlchemy? Поскольку в конструкторе будут одинаковые поля, как в конструкторе, так и в таблице пользовательской базы данных, было бы неплохо.

Я хочу, чтобы мой маршрут, чтобы посмотреть, как это вместо:

@user.route('/', methods=['POST']) 
def create(): 
    form = CreateUserForm(request.form) 

    if form.validate(): 
     user = User(form) 
     ... 

Так что я не приходится иметь дело с form.name и form.last_name в каждой части.

ответ

2

Чтобы установить данные формы от существующей модели использует следующее:

my_model = # ... 

form = CreateUserForm(obj=my_model) 

Чтобы установить модель из заполненной формы, например, после того, как пост обратно, используйте следующее:

form = CreateUserForm(request.form) 
if form.validate_on_submit(): 
    user = User() 
    form.populate_obj(user) # Copies matching attributes from form onto user 

Смотрите документацию на WTForms. Также рассмотрите возможность использования Flask-WTF и WTForms-Alchemy.

+0

Спасибо, я попробую! Просто для любопытства, почему в большинстве случаев существуют специальные пакеты для Flask? Что лучше с Flask-WTF вместо исходного пакета? – theva

+0

@theva - Flask-WTF и WTForms-Alchemy помогают с вырезанием кодирующего кода - особенно, поскольку ваши проекты Flask растут по сложности. – pjcunningham

Смежные вопросы