Python Flask SQLAlchemy:具有生成属性的声明性模型
我有一个代表报告的类,包含一个相当长的检查列表和相关注释,如下所示:Python Flask SQLAlchemy:具有生成属性的声明性模型,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我有一个代表报告的类,包含一个相当长的检查列表和相关注释,如下所示: class Report(db.Model): check_1 = db.Column(db.Boolean, info={'label': 'Check 1'}) check_1_comment = db.Column(db.String, info={'label': 'Check 1 comment'}) check_2 = db.Column(db.Boolean, info={'label': 'Che
class Report(db.Model):
check_1 = db.Column(db.Boolean, info={'label': 'Check 1'})
check_1_comment = db.Column(db.String, info={'label': 'Check 1 comment'})
check_2 = db.Column(db.Boolean, info={'label': 'Check 2'})
check_2_comment = db.Column(db.String, info={'label': 'Check 2 comment'})
由于属性设置要比这复杂得多,而且字段会定期更改,因此我想对其进行重构,从OrderedICT这样的结构生成属性
我尝试了一些使用自定义元类的方法,但鉴于Flask SQLAlchemy的对象层次结构,似乎很难正确执行:
class ReportMeta(_BoundDeclarativeMeta):
def __new__(cls, *args, **kwargs):
klass = super().__new__(cls, *args, **kwargs)
checks = cls.Meta.checks
for (key, label) in checks.items():
setattr(klass, key, db.Column(db.Boolean, info={'label': label}))
setattr(klass, f'{key_comment}', db.Column(db.Str, info={'label': label}))
class Report(db.Model, metaclass=ReportMeta):
class Meta:
checks = OrderedDict([('check_1', 'Check 1'), ('check_2', 'Check 2')])
这当然不起作用,因为db.Model和ReportMeta之间的元类冲突。
有可能做类似的事情吗?你能举一个例子说明你的有序dict将包含什么吗?在第二个例子中,在Report类的Meta类中:
checks=orderedict([('check_1','check 1'),('check_2','check 2'))