在app引擎Model Class中自动设置属性值

时间:2013-12-15 16:05:44

标签: google-app-engine python-2.7 google-cloud-datastore

如何从模型内部设置Model属性的值(datastore ndb.Model)?

class Note(ndb.Model):
    content = ndb.StringProperty()
    date = ndb.DateTimeProperty(auto_now_add=True)
    depth = ndb.IntegerProperty()

    def _calculate_depth(self):
        self.depth = len(self.key.parent().pairs())

note = Note( parent=ndb.Key('Note', 'main', 'Todo', 'task1') , content='whatever')
note.put()

我正在寻找的是当运行创建新笔记calculate_depth方法时,它设置了深度属性的值

解决方案:)

class Note(ndb.Model):
    content = ndb.StringProperty()
    date = ndb.DateTimeProperty(auto_now_add=True)
    depth = ndb.ComputedProperty(lambda self: len(self.key.parent().pairs()))


note = Note( parent=ndb.Key('Note', 'main', 'Todo', 'task1') , content='whatever')
note.put()

1 个答案:

答案 0 :(得分:0)

对不起这件事。

您要找的是帖子PUT hooks.

我在你的函数_calculate_depth看到你使用了实体键的值。然后,不仅需要创建实体,还需要在ndb中写入以键入密钥。

如果您希望“自动”发生,那么Model__post_put_hook就是您所需要的