【问题标题】:flask-sqlalchemy doing math in admin modelflask-sqlalchemy 在管理模型中做数学
【发布时间】:2018-11-16 09:41:25
【问题描述】:

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

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

目的是当我将“x”和“y”放入管理表单数学时,自动接收 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)

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

【问题讨论】:

    标签: flask-sqlalchemy flask-admin


    【解决方案1】:

    为了使用 flask-admin 视图,您的模型必须具有带有默认签名的 __init__ 方法(仅 self 参数),因为它是由 flask-admin 视图以这种方式调用的:

    model = self.model()
    

    我认为您正在尝试实现在更改 xy 列时自动填充 z 列的逻辑。您可以使用hybrid attributes 来完成此操作:

    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 是这里的一个虚拟列,它在math 表中不存在,而是动态计算的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多