我是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)
请帮助我了解我在做什么错以及如何解决。非常感谢
答案 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
表中不存在,但是即时计算的。