我找到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")
答案 0 :(得分:7)
ProtoRPC Python API完全支持此功能,并且不值得推销。
简单的Enum如下所示:
from protorpc import messages
class Alpha(messages.Enum):
A = 0
B = 1
C = 2
D = 3
事实证明,ndb
有msgprop
个模块用于存储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
以外的任何值。