我正在Google App Engine中完成最终学位课程,但是当我尝试这个时我遇到了问题:
class Predicate(ndb.Model):
name = ndb.StringProperty()
parameters = ndb.JsonProperty()
class State(ndb.Model):
predicates = ndb.StructuredProperty(Predicate, repeated=True)
class Action(ndb.Model):
name = ndb.StringProperty()
parameters = ndb.StringProperty(repeated=True)
preconditions = ndb.StructuredProperty(Predicate, repeated=True)
predicatesToAdd = ndb.StructuredProperty(Predicate, repeated=True)
predicatesToDel = ndb.StructuredProperty(Predicate, repeated=True)
class Plan(ndb.Model):
plan = ndb.StructuredProperty(Predicate, repeated=True)
class Problem(ndb.Model):
initialState = ndb.StructuredProperty(Predicate)
goalState = ndb.StructuredProperty(Predicate)
actions = ndb.StructuredProperty(Action, repeated=True)
我收到此错误:
TypeError: This StructuredProperty cannot use repeated=True because its model class (Predicate) contains repeated properties (directly or indirectly).
StructuredProperty,如果它包含重复,则无法复制另一个StructuredProperty。但我需要这种结构模型。我该如何解决这个问题?
抱歉我的英语不好:(
我使用LocalStructuredProperty解决了这个问题,但我认为它根本不起作用
答案 0 :(得分:1)
您的设计存在的问题是ndb不允许嵌套的重复属性。换句话说,您不能拥有重复的结构化属性,而后者又具有自己的重复属性。如果从parameters属性中删除repeated = True,它将起作用。
您需要重新考虑您的设计才能解决这个问题。一种可能的解决方案可能是使用JsonProperty作为参数,并将字符串列表存储为JSON字符串。当然,您无法查询它们,但可能会根据您的要求进行查询。