我想要几个“包”(Mjbundle),它们本质上是问题包(Mjquestion)。Mjquestion 有一个整数“索引”属性,该属性必须是唯一的,但它应该只在包含它的包中是唯一的。我不确定如何正确地对这样的事情进行建模,我尝试使用下面的结构化(重复)属性来做到这一点,但实际上还没有任何东西可以限制 Mjquestion 索引的唯一性。有什么更好/正常/正确的方法来做到这一点?
class Mjquestion(ndb.Model): """This is a Mjquestion.""" index = ndb.IntegerProperty(indexed=True, required=True) genre1 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3,4,5,6,7]) genre2 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3]) #(will add a bunch of more data properties later) class Mjbundle(ndb.Model): """This is a Mjbundle.""" mjquestions = ndb.StructuredProperty(Mjquestion, repeated=True) time = ndb.DateTimeProperty(auto_now_add=True)
(使用上述模型并获取了某个 Mjbundle 实体后,我不确定如何根据索引从 mjquestions 中快速获取 Mjquestion。关于结构化属性过滤的解释看起来适用于 Mjbundle 类型级别,而我已经有一个 Mjbundle 实体,并且不确定如何快速查询该实体包含的问题,而无需在代码中“手动”循环遍历它们。)
当您使用 StructuredProperty 时,所有类型的实体都会作为包含实体的一部分进行存储 - 因此当您获取包时,您已经获取了所有问题。如果您坚持使用这种存储方式,迭代签入代码就是解决方案。