Python 模型中的自动GUID键\u名称
我想让我的模型自动获得一个GUID作为密钥名,我正在使用下面的代码。这是解决问题的好办法吗?它有什么缺点吗Python 模型中的自动GUID键\u名称,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我想让我的模型自动获得一个GUID作为密钥名,我正在使用下面的代码。这是解决问题的好办法吗?它有什么缺点吗 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, **
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)
有一篇文章介绍了如何使用和设置密钥名称,我不知道您当前的方法是否有效,但至少您应该知道其他选项 有一篇文章介绍了如何使用和设置密钥名称,我不知道您当前的方法是否有效,但至少您应该知道其他选项 在
模型
子类上重写\uuuuu init\uuuu
是危险的,因为框架使用构造函数从数据存储中重建实例,用户代码也使用构造函数。除非您确切地知道如何使用构造函数来重建现有实体(这是一个内部细节,将来可能会更改),否则您应该避免重写它
相反,请定义工厂方法,如下所示:
class MyModel(db.Model):
@classmethod
def new(cls, **kwargs):
return cls(key_name=str(uuid.uuid4()), **kwargs)
在
模型
子类上重写\uuuuuu init\uuuuu
是危险的,因为除了用户代码使用构造函数之外,框架还使用构造函数从数据存储中重构实例。除非您确切地知道如何使用构造函数来重建现有实体(这是一个内部细节,将来可能会更改),否则您应该避免重写它
相反,请定义工厂方法,如下所示:
class MyModel(db.Model):
@classmethod
def new(cls, **kwargs):
return cls(key_name=str(uuid.uuid4()), **kwargs)