我在尝试使用这种结构创建实体时遇到了一些问题:
class MainEnt(ndb.Model):
name = ndb.StringProperty()
choices = ndb.KeyProperty(repated=True)
@classmethod
@ndb.transactional
def create(cls, name, choices):
#Here comes my problem!
class Choice(ndb.Model):
name = ndb.StringProperty()
所以在这里我有一个主要实体,它有一些选择列表。 要创建主实体,我需要使用事务来一致地创建主实体和选择实体。如果某些操作失败,我希望所有操作都失败。
问题是在一个事务内运行都需要在同一个实体组中,但是我不能这样做,因为我不知道主实体的密钥将它作为父参数分配给每个选择。我不能在事务中使用allocate_ids,因此该选项不起作用。
我不想使用跨群组交易,也不想两次保存主要实体。
此外,我正在考虑使用查询来获取选项而不使用重复属性,但只要每个MainEnt通常只有2-3个选项,使用查询就会浪费资源。
我该怎么办?
答案 0 :(得分:2)
如果您要每次都获取所有选择,那么只需使用重复的StructuredProperty
class Choice(ndb.Model):
name = ndb.StringProperty()
class MainEnt(ndb.Model):
name = ndb.StringProperty()
choices = ndb.StructuredProperty(Choice,repeated=True)
def create(cls, name, choices):
m = cls.MainEnt(name=name)
m.choices = [Choice(name=name) for name in choices]
m.put()