我希望我的模型自动获得一个 GUID 作为 key_name,我正在使用下面的代码。这是解决问题的好方法吗?它有什么缺点吗?
class SyncModel(polymodel.PolyModel):
def __init__(self, key_name=None, key=None, **kwargs):
super(SyncModel, self).__init__(key_name=str(uuid.uuid1()) if not key else None,key=key, **kwargs)
请您参考如下方法:
在 Model 子类上覆盖 __init__ 是危险的,因为构造函数除了被用户代码使用外,还被框架用来从数据存储中重建实例。除非您确切知道构造函数是如何用于重建现有实体的——这是一个内部细节并且将来可能会发生变化——否则您应该避免重写它。
相反,定义一个工厂方法,如下所示:
class MyModel(db.Model):
@classmethod
def new(cls, **kwargs):
return cls(key_name=str(uuid.uuid4()), **kwargs)
