Рекомендации по сохранению изменений модели только при отправке клиентом запроса на сохранение при сохранении контекста сеанса? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть приложение фляги, где клиенты постоянно вносят изменения в объект в модели в БД. Затем, когда клиент явно отправляет запрос «Сохранить», новое состояние объекта должно быть сохранено в БД. Если клиент не отправил запрос «Сохранить», я бы хотел, чтобы все изменения полей были отброшены, а состояние объекта было возвращено в исходное состояние перед изменениями, чтобы следующая загрузка объекта находилась в исходном состоянии.

Проблема в том, что мне нужно сохранять даже несохраненные изменения объекта в БД, чтобы обеспечить контекст сеанса для следующего запроса от клиента. Для будущих запросов в сеансе необходимо самое последнее состояние объекта. Но при таком подходе я фактически полностью теряю исходное состояние объекта.

Некоторые примеры ниже

#models.py - saves an object in the  dashboard field

class Dash(db.Model):

    id = db.Column(db.INTEGER, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    dashboard = db.Column(db.PickleType(),nullable=True)

И в моих маршрутах у меня есть следующий метод, который обновляетопределенный атрибут в объекте:

#routes.py

class setInputAPI(Resource):
    def post(self):
        dash = getdash() #gets latest DB object

        dash.value = request.json['new_val'] #changes an object attribute 

        updateDB(dash) #update db with new object so future requests have context
        return {'message':'success'}

#Helper functions
def getdash():
    dash_id = request.json['dash_id']
    dash = Dash.query.get_or_404(dash_id).dashboard
    return dash

def updateDB(dash):
    dash_id = request.json['dash_id']
    db.session.query(Dash).filter(Dash.id == dash_id).update({'dashboard': dash})
    db.session.commit()

При отправке вышеуказанного запроса setInputAPI состояние моей БД будет обновлено, чтобы отразить изменения клиента, даже если клиент не отправил запрос на сохранение. Поэтому я потерял всеисходные данные, и если бы клиент перезагрузил этот объект в будущем сеансе, он увидел бы свой измененный экземпляр объектаНапример, последний сохраненный.

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

Таким образом, я мог бы иметь 2 таблицы - одну для отслеживания состояния last_saved и другую для отслеживания состояния current_unsaved.

Но я должен представить, что должен быть лучший способ сделать это какэто кажется вздорным?

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