1

我有一个没有父母就没有意义的模型。有没有办法强制实体拥有父级?如果子实体在没有父实体的情况下被实例化,我希望引发异常,类似于必需的属性。

class Parent(db.Model):
    eye_color = db.StringProperty(required=True)

class Child(db.Model):
    pass

不引发异常:

mom = Parent(eye_color='purple')
jimmy = Child(parent=mom)

引发异常:

mom = Parent(eye_color='purple')
jimmy = Child()
4

2 回答 2

2

我没有亲自尝试过,但是您应该能够覆盖__init__Child 类并检查以确保父级不是 None。像这样:

class Child(db.Model):
  pass

  def __init__(self,
               parent=None,
               key_name=None,
               _app=None,
               _from_entity=False,
               **kwds):
    if not parent:
      raise ValueError('parent is required.')
    super(Did, self).__init__(parent=parent, key_name=key_name, app=_app,
                              _from_entity=_from_entity, **kwds)
于 2012-12-02T05:53:23.980 回答
0

使用 ndb,您可以使用 pre put hook 方法来检查该实例是否具有父级,如果没有则引发异常。我看到您使用的是较旧的 db 模块,我相信它没有相同的钩子方法。您应该考虑迁移到更好和改进的 ndb 数据存储 API,您将获得其他好处,例如自动缓存等等。

新开发银行:https ://developers.google.com/appengine/docs/python/ndb/overview

NDB 模型挂钩:https ://developers.google.com/appengine/docs/python/ndb/entities#hooks

编辑:我只是提醒您可以使用 db API 执行类似于 ndb 模型挂钩的操作。在此解释,像往常一样,来自尼克约翰逊的帖子。

于 2012-12-02T22:49:18.700 回答