Очередной привет)
Решил поиграться с PonyORM. Оказалась очень классная штука.
Но не могу решить одну проблему. Как сделать отложную запись в базу данных?
Например:
Есть у меня поставщик, я открываю окно с поставщиком меняю ему реквизиты, и после этого решаю сохранить данные или нет. Но Pony не позволяет изменять класс поставщика без @db_session, а если поставить @db_session то он сразу все комитит. В таком случае я не могу отменить изменения.
Сделал небольшой примерчик.
from my_class.orm_class import Vendor
from pony.orm import *
class VendorWindow():
@db_session
def __init__(self, order_id):
self.vendor = Vendor[order_id]
def ui_new_name(self, name): # Изменение имени поставщика
self.vendor.name = name
def ui_new_phone(self, number): # Изменение номера поставщика
self.vendor.phone = number
def ui_accept(self): # Принять изменеия
pass # тут надо закомитить изменения
def ui_cancel(self): # Не применяит изменеия
pass # тут надо просто закрыть окно без изменений в БД
class Vendor(db.Entity):
id = PrimaryKey(int, auto=True)
name = Required(str)
full_name = Optional(str)
mail = Optional(str)
phone = Optional(str)