Python Appengine模型自引用属性和父子关系
我有一个场景,其中我需要一个自引用属性,如下所示:Python Appengine模型自引用属性和父子关系,python,google-app-engine,Python,Google App Engine,我有一个场景,其中我需要一个自引用属性,如下所示: class Post(db.Model): creator = db.UserProperty() post_title = db.StringProperty(required=True) post_status = db.StringProperty(required=True, choices=['draft', 'published']) post_parent = db.SelfReferenceProperty()
class Post(db.Model):
creator = db.UserProperty()
post_title = db.StringProperty(required=True)
post_status = db.StringProperty(required=True, choices=['draft', 'published'])
post_parent = db.SelfReferenceProperty()
现在,我想确保一个实体不应该是它自己的父实体,一个实体的子实体不能是它的父实体。如何确保PostForm模型和Post模型中的这种关系。我建议使用ListProperty(db.Key)来代替,存储祖先列表。这样,您可以更高效地查询(“获取节点x的每个后代”更容易),并且可以轻松地强制执行后一个条件,如下所示:
def ancestor_list_validator(l):
if len(l) != len(set(l)):
raise Exception("Repeated values in ancestor list!")
class Post(db.Model):
# ...
ancestors = db.ListProperty(db.Key, validator=ancestor_list_validator)
验证实体自己的密钥是否不在列表中有点困难,可能需要编写一个