flask ndb.model auto created_by 字段
flask ndb.model auto created_by field
我有一个ndb.Model
class BaseModel(ndb.Model):
created_on = ndb.DateTimeProperty(auto_now_add=True)
created_by = ndb.KeyProperty(kind='MyUser') # ????
我正在寻找一种创建自动 "created_by" 字段的优雅方法,该字段在创建时填充了 g.current_user 键,以便
mymodel = BaseModel()
已经有 created_on 和 created_by
有什么想法吗?
我建议您自己定义 属性 class:
class OwnerProperty(ndb.KeyProperty):
_auto_current_user_add = False
def __init__(self, auto_current_user_add=False):
super(OwnerProperty, self).__init__(kind='MyUser')
self._auto_current_user_add = auto_current_user_add
def _prepare_for_put(self, entity):
if self._auto_current_user_add and not self._has_value(entity):
value = g.current_user.key
if value is not None:
self._store_value(entity, value)
super(OwnerProperty, self)._prepare_for_put(entity)
我不太确定你的 g.current_user
是如何设置的,但假设它是一个实体,这会起作用。请注意,与 ndb.DateTimeProperty
一样,只有在第一次放置实体后,所有者才会被填充。
这是基于ndb.UserProperty
is written的方式。但是,我建议不要直接使用 UserProperty
,因为用户属性会做很多奇怪的事情,所以处理您自己的用户实体总是更好。
最后做了一些简单的事情:
class BaseModel(ndb.Model):
created_on = ndb.DateTimeProperty(auto_now_add=True)
created_by = ndb.KeyProperty(kind='TalknetUser')
def __init__(self, *args, **kwargs):
super(BaseModel, self).__init__(parent=talknet_key(), *args, **kwargs)
try:
self.created_by = current_user.ndb.key
except Exception as x:
self.created_by = None
但目前有效
我有一个ndb.Model
class BaseModel(ndb.Model):
created_on = ndb.DateTimeProperty(auto_now_add=True)
created_by = ndb.KeyProperty(kind='MyUser') # ????
我正在寻找一种创建自动 "created_by" 字段的优雅方法,该字段在创建时填充了 g.current_user 键,以便
mymodel = BaseModel()
已经有 created_on 和 created_by
有什么想法吗?
我建议您自己定义 属性 class:
class OwnerProperty(ndb.KeyProperty):
_auto_current_user_add = False
def __init__(self, auto_current_user_add=False):
super(OwnerProperty, self).__init__(kind='MyUser')
self._auto_current_user_add = auto_current_user_add
def _prepare_for_put(self, entity):
if self._auto_current_user_add and not self._has_value(entity):
value = g.current_user.key
if value is not None:
self._store_value(entity, value)
super(OwnerProperty, self)._prepare_for_put(entity)
我不太确定你的 g.current_user
是如何设置的,但假设它是一个实体,这会起作用。请注意,与 ndb.DateTimeProperty
一样,只有在第一次放置实体后,所有者才会被填充。
这是基于ndb.UserProperty
is written的方式。但是,我建议不要直接使用 UserProperty
,因为用户属性会做很多奇怪的事情,所以处理您自己的用户实体总是更好。
最后做了一些简单的事情:
class BaseModel(ndb.Model):
created_on = ndb.DateTimeProperty(auto_now_add=True)
created_by = ndb.KeyProperty(kind='TalknetUser')
def __init__(self, *args, **kwargs):
super(BaseModel, self).__init__(parent=talknet_key(), *args, **kwargs)
try:
self.created_by = current_user.ndb.key
except Exception as x:
self.created_by = None
但目前有效