具有相互依赖属性的 Ndb 模型验证?

Ndb Model validation with interdependent properties?

我想验证 NDB 模型。我的模型是这样的:

class Sample(ndb.Model):
  x = ndb.IntegerField()
  y = ndb.IntegerField()

我想确保 x < y 在任何时间点。

我尝试过的方法:

  1. 编写验证器函数并从覆盖的构造函数中调用它。但是以后可能会更改字段值。它应该在每次保存时进行验证

  2. 添加一个 _pre_put_hook - 但这似乎有些矫枉过正。另外 - 在实体实际保存在数据存储区之前,这不会引发错误

理想情况下,我想要的是每当 a 或 b 更改时 - 应触发一个函数,该函数将验证实体是否有效,否则抛出错误。

注意:目前我正在使用 _pre_put_hook。

这应该在 ndb.Model 逻辑之外完成。

只需在模型中创建一个函数,如下所示:

class Sample(ndb.Model):
   x = ndb.IntegerField()
   y = ndb.IntegerField()

   @classmethod
   def new(cls, x, y):
     if x >= y:
        raise Exception
     return cls(x=x, y=y)

然后用自定义异常替换我使用的通用异常,并用 try 块捕获它。