Как выполнить операцию над столбцами базы данных flask-admin для сохранения результатов в другом столбце этой таблицы - PullRequest
0 голосов
/ 22 мая 2019

Я создаю приложение администратора фляги, где мне нужно сохранить общее количество пары целочисленных столбцов в третьем столбце той же таблицы.

from flask_sqlalchemy import SQLAlchemy
from flask_admin.contrib.sqla import ModelView
from flask import Flask
import os
from flask_admin import Admin

application = Flask(__name__)
project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir,"testing.db"))
application = Flask(__name__)
application.config["SQLALCHEMY_DATABASE_URI"] = database_file
application.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
application.secret_key = "ssshhhh"
db = SQLAlchemy(application)

admin = Admin(application,name="FLASK")

class Test(db.Model):
    id = db.Column("ID",db.Integer,primary_key=True)
    first_no = db.Column("First_no",db.Integer)
    second_no = db.Column("Second_no",db.Integer)
    total = db.Column("Total",db.Integer)

class TestView(ModelView):
    page_size = 20
    edit_modal = True

if __name__ == '__main__':
    db.create_all()
    admin.add_view(TestView(Test, db.session))
    application.run(debug=True)

Приведенный выше пример позволяет мне сохранять значения во всех трех полях вручную, что не являетсяОжидаемый.

Ожидаемый результат, который я ищу, получить общее количество пары целых чисел и магазинов в базе данных.

1 Ответ

1 голос
/ 23 мая 2019

Вы можете использовать два варианта:

  1. Используйте параметр onupdate для Column, чтобы установить значение total при обновлении, например: total = db.Column("Total", db.Integer, onupdate=first_no + second_no)

  2. Используйте hybrid_property для расчета суммы без сохранения значения:

class Test(db.Model):
    ...

    @hybrid_property
    def total(self):
        return self.first_no + self.second_no
...