Vì tôi cần các giá trị mặc định không nhất thiết phải ở nhà xây dựng, nhưng đôi khi từ các nơi khác, tôi đã đưa ra một chức năng, mà tôi thêm vào lớp cơ sở Object tôi:
Base = declarative_base()
class ItemBase(Base):
__abstract__ = True
def _ensure_defaults(self):
for column in self.__table__.c:
if getattr(self, column.name) is None and column.default is not None and column.default.is_scalar:
setattr(self, column.name, column.default.arg)
Mà rõ ràng không làm việc cho cuộc gọi. Tôi không thể tìm ra cách để gọi nó, và có lẽ nó cho tốt hơn (cảm thấy như hack các suy nghĩ đã).
Với điều này tôi có thể làm một cái gì đó như:
class User(ItemBase):
# ... inheritance, columns and stuff
def __init__(self):
self._ensure_defaults()
Tôi cũng có thể gọi phương thức không __init__
, mà còn từ các phương pháp khác, trong trường hợp tôi chỉ cần phải dựa vào các giá trị trong trường hợp đặc biệt (mà Tôi đã kết thúc việc xóa sau, vì nó quá khó hiểu). Tuy nhiên trong một số trường hợp, điều này có thể linh hoạt hơn so với giải pháp của @JamesEmerton.
Xem thêm: https://stackoverflow.com/a/48097586/6646912 – krassowski