flask-sqlalchemy在管理员模型中进行数学运算

时间:2018-11-16 09:41:26

标签: flask-sqlalchemy flask-admin

我是flask-sqlalchemy和flask-admin的新手。我想进行简单的计算,如果我仅使用python shell,它就可以工作,但是当我尝试通过flask admin执行x + y时,出现错误:

  

TypeError: init ()缺少2个必需的位置参数:“ x”和“ y”

当我将“ x”和“ y”放入管理表格Math中时,目的是自动在 z 列中接收x + y的总和。

这是我的代码:

db = SQLAlchemy(app)

class Math(db.Model):

     id = db.Column(db.Integer, primary_key=True)
     x = db.Column(db.Integer)
     y = db.Column(db.Integer)
     z = db.Column(db.Integer)

     def __init__(self, x, y):
         self.x = x
         self.y = y
         self.z = self.x+self.y

admin = Admin(app, name='Test', template_mode='bootstrap3')
admin.add_view(ModelView(Math, db.session))


db.drop_all()
db.create_all()

if __name__=='__main__':
   app.run(debug=True)

请帮助我了解我在做什么错以及如何解决。非常感谢

1 个答案:

答案 0 :(得分:0)

要使用flask-admin视图,您的模型必须具有带有默认签名的\b - word boundary [A-Za-z] - letter (exactly one) (?: - one or more groups of \s+ - white space (at least one) [A-Za-z] - letter (exactly one) )+ \b - word boundary 方法(仅使用__init__参数),因为flask-admin视图以这种方式调用该方法:

self

我认为您正在尝试实现一种逻辑,该逻辑会在更改model = self.model() z列时自动填充x列。您可以使用hybrid attributes

y

from sqlalchemy.ext.hybrid import hybrid_property class Math(db.model): id = db.Column(db.Integer, primary_key=True) x = db.Column(db.Integer) y = db.Column(db.Integer) @hybrid_property def z(self): return self.x + self.y 是此处的虚拟列,它在z表中不存在,但是即时计算的。