фляга-sqlalchemy делает математику в модели администратора - PullRequest
0 голосов
/ 16 ноября 2018

Я просто новичок в фляге-sqlalchemy и фляге-админе. Я хочу сделать простой расчет, и он работает, если я использую только оболочку Python, но когда я пытаюсь сделать x + y через администратор фляги, появляется ошибка:

TypeError: init () отсутствует 2 обязательных позиционных аргумента: 'x' и 'y'

Цель состоит в том, чтобы автоматически получить сумму x + y в столбце z , когда я ставлю 'x' и 'y' в форме администратора Math.

Вот мой кусок кода:

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 голосов
/ 19 ноября 2018

Для работы с представлениями flask-admin ваши модели должны иметь метод __init__ с подписью по умолчанию (только аргумент self), потому что он вызывается представлением flask-admin следующим образом:

model = self.model()

Я думаю, что вы пытаетесь реализовать логику, которая автоматически заполняет столбец z при изменении столбцов x и 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 - это виртуальный столбец, который не существует в таблице math, но рассчитывается на лету.

...