GAE - 具有将()s本身放在数据库中的函数的数据存储模型类?

时间:2013-04-14 00:58:16

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

我正在尝试编写一个数据存储模型类,该类具有创建对象的功能,并将其一次性添加到数据存储区。这是我目前拥有的(不起作用):

class Channel(db.Model):
    name = db.StringProperty(required = True)
    subscriber_list = db.ListProperty(users.User)

    def addChannelWithName(name):
        channel = Channel()
        channel.name = name
        channel.put()

从这里我得到的问题是,第一件事传递给addChannelWithName()假设是一个Channel实例,但当然我正在尝试做一个通道实例还不存在。它应该在此功能期间创建。我该怎么做才能做到这一点?有没有办法将此函数保留为Channel的方法,还是应该是一个完全独立于类的函数?或者我应该做别的事吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

或者你可以使它成为类方法或静态方法。这样,如果您在其他地方使用模型,则无需从模块中导入单独的函数。

class Channel(db.Model):
    name = db.StringProperty(required = True)
    subscriber_list = db.ListProperty(users.User)

    @classmethod
    def addChannelWithName(cls,name):
        channel = cls()
        channel.name = name
        channel.put()

或静态方法并省略cls。

您可以将其称为Channel.addChannelWithName(name) 如果你使用类或静态方法,我会从方法名称中删除“Channel”位,因为它是多余的。即Channel.addWithName(name),因为你只从类中调用它。

答案 1 :(得分:0)

我认为最简单的解决方案是使其成为顶级的独立功能而不是方法。 (你可以把它变成一个静态方法,或者 - 通过改变呼叫签名 - 一种类方法,但我在这里做这件事并没有任何好处。)