小能豆

如何在 GAE ndb 中建立唯一约束模型

py

我想要几个“包”(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 实体,并且不确定如何快速查询该实体包含的问题,而无需在代码中“手动”循环遍历它们。)


阅读 19

收藏
2024-12-10

共1个答案

小能豆

当您使用 StructuredProperty 时,所有类型的实体都会作为包含实体的一部分进行存储 - 因此当您获取包时,您已经获取了所有问题。如果您坚持使用这种存储方式,迭代签入代码就是解决方案。

2024-12-10