Python things
Aus Froggis Wissenssammlung
Version vom 5. August 2019, 12:21 Uhr von Froggi (Diskussion | Beiträge)
When data comes back from the client it is treated as a string by WTForms unless a callable is passed to the coerce keyword argument of the wtforms.fields.SelectField constructor:
area = SelectField(coerce=int)
Alternately, if you are using SQLAlchemy you could use wtforms.ext.sqlalchemy.fields.QuerySelectField (wtforms_sqlalchemy if you are using WTForms 3+):
area = QuerySelectField(query_factory=Area.objects.all,
get_pk=lambda a: a.id,
get_label=lambda a: a.name)
User Role models for Flask-SQLAlchemy
old...
class Role(db.Model, RoleMixin):
__tablename__ = table_prefix + "role"
id = db.Column(db.Integer(), primary_key=True)
role = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
users = db.relationship(
'User',
secondary=table_prefix + 'user_roles',
back_populates='roles',
lazy='dynamic')
class User(UserMixin, db.Model):
__tablename__ = table_prefix + "user"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), index=True, unique=True)
password_hash = db.Column(db.String(128))
email = db.Column(db.String(100), index=True, unique=True)
language = db.Column(db.String(10), default="en_UK")
roles = db.relationship(
'Role',
secondary=table_prefix + 'user_roles',
back_populates='users',
cascade='all, delete',
lazy='dynamic')
new...? UserMixin and RoleMixin from Flask-Security with minimal requirements included (see also: Flask Security (Models)
class Role(db.Model, RoleMixin):
__tablename__ = table_prefix + "role"
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class User(db.Model, UserMixin):
__tablename__ = table_prefix + "user"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), index=True, unique=True)
password_hash = db.Column(db.String(128))
email = db.Column(db.String(100), index=True, unique=True)
active = db.Column(db.Boolean(), default=False)
confirmed_at = db.Column(db.DateTime())
language = db.Column(db.String(10), default="en_UK")
roles = db.relationship(
'Role',
secondary=table_prefix + 'userrole',
backref=db.backref('users', lazy='dynamic'),
passive_deletes=True)
def __repr__(self):
return '<User {}>'.format(self.username)
class UserRole(db.Model):
__tablename__ = table_prefix + 'userrole'
user_id = db.Column(
db.Integer(),
db.ForeignKey(table_prefix
+ 'user.id',
ondelete='CASCADE')
)
role_id = db.Column(
db.Integer(),
db.ForeignKey(table_prefix + 'role.id')
)
__table_args__ = (
PrimaryKeyConstraint(
user_id,
role_id),
{})