将枚举传递给python中的ndb.Model字段

时间:2013-03-21 16:51:35

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

我找到How can I represent an 'Enum' in Python?来了解如何在python中创建枚举。我的ndb.Model中有一个字段,我想接受其中一个枚举值。我只是将字段设置为StringProperty吗?我的枚举是

def enum(**enums):
    return type('Enum', (), enums)

ALPHA = enum(A="A", B="B", C="C", D="D")

1 个答案:

答案 0 :(得分:7)

ProtoRPC Python API完全支持此功能,并且不值得推销。

简单的Enum如下所示:

from protorpc import messages 

class Alpha(messages.Enum):
    A = 0
    B = 1
    C = 2
    D = 3

事实证明,ndbmsgprop个模块用于存储protorpc个对象,这是documented

为了存储您的Alpha枚举,您需要执行以下操作:

from google.appengine.ext import ndb
from google.appengine.ext.ndb import msgprop

class Part(ndb.Model):
    alpha = msgprop.EnumProperty(Alpha, required=True)
    ...

编辑:正如hadware所指出的那样,msgprop.EnumProperty默认情况下未编入索引。如果要对这些属性执行查询,则需要将属性定义为

    alpha = msgprop.EnumProperty(Alpha, required=True, indexed=True)

然后执行查询

ndb.query(Part.alpha == Alpha.B)

或使用Alpha.B以外的任何值。