具有相互依赖属性的 Ndb 模型验证?
Ndb Model validation with interdependent properties?
我想验证 NDB 模型。我的模型是这样的:
class Sample(ndb.Model):
x = ndb.IntegerField()
y = ndb.IntegerField()
我想确保 x < y 在任何时间点。
我尝试过的方法:
编写验证器函数并从覆盖的构造函数中调用它。但是以后可能会更改字段值。它应该在每次保存时进行验证
添加一个 _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 块捕获它。
我想验证 NDB 模型。我的模型是这样的:
class Sample(ndb.Model):
x = ndb.IntegerField()
y = ndb.IntegerField()
我想确保 x < y 在任何时间点。
我尝试过的方法:
编写验证器函数并从覆盖的构造函数中调用它。但是以后可能会更改字段值。它应该在每次保存时进行验证
添加一个 _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 块捕获它。