我想验证NDB模型。我的模型类似于:
class Sample(ndb.Model):
x = ndb.IntegerField()
y = ndb.IntegerField()
我想确保x<在任何时间点。
我尝试过的方法:
写入Validator函数并从重写的构造函数中调用它。但是字段值可能会在以后更改。它应该在每次保存时验证
添加一个_pre_put_hook - 但这似乎有点矫枉过正。另外 - 在实体实际保存在数据存储区
理想情况下,我想要的是每当a或b被更改时 - 应该触发一个函数,它将验证实体是否有效,否则抛出错误。
注意:目前我正在使用_pre_put_hook。
答案 0 :(得分:0)
这应该在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)
然后将我使用的通用Exception替换为自定义Exception并使用try块捕获它。