我有一个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
任何想法?
答案 0 :(得分:0)
我建议您定义自己的属性类:
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
,因为用户属性会做很多奇怪的事情,因此处理自己的用户实体总是更好。
答案 1 :(得分:0)
最终做了一些简单的事情:
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
但到目前为止它有效