Как мне сопоставить объект flask -формы с flask -моделью, чтобы у каждого зарегистрированного пользователя был уникальный экземпляр формы?
По функциональности, вот что я хочу:
from app import db, login_manager
from flask_login import UserMixin
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField, IntegerField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
class MyForm(FlaskForm):
name = StringField('Name:', validators=[DataRequired(), Length(min=2, max=20)])
submit = SubmitField('Sign In')
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
myform = db.Column(db.Object, unique=True, nullable=False)
А когда я создаю экземпляр пользователя:
user = User(myform=MyForm())
db.session.add(user)
db.session.commit()
И когда мне нужно получить доступ / передать форму в маршрутах:
@app.route('/')
def index():
user = User.query.get(1)
form = user.myform
return render_template(url_for('index.html'), form=form)
Я хочу, чтобы у каждого пользователя был свой уникальный экземпляр формы, потому что я хочу, чтобы форма динамически редактировалась зарегистрированным пользователем, чтобы каждый пользователь имел свою собственную форму и поля.
EDIT
Я нашел эту ссылку на странице SQLAlchemy https://docs.sqlalchemy.org/en/13/core/custom_types.html#creating -new-types Однако можно ли ее реализовать в flask -sqlalchemy?
Из sqlalchemy:
import sqlalchemy.types as types
class MyType(types.UserDefinedType):
def __init__(self, precision = 8):
self.precision = precision
def get_col_spec(self, **kw):
return "MYTYPE(%s)" % self.precision
def bind_processor(self, dialect):
def process(value):
return value
return process
def result_processor(self, dialect, coltype):
def process(value):
return value
return process
table = Table('foo', meta,
Column('id', Integer, primary_key=True),
Column('data', MyType(16))
)