我有一个类似的模型类:
class Book(ndb.Model):
title = ndb.StringProperty(required=True)
author = ndb.StringProperty(required=True)
我有一些代码使用它:
book = Book()
print book
>> Book()
book_key = book.put()
>> BadValueError: Entity has uninitialized properties: author, title
有没有办法在保存之前检查模型是否有效?
找出哪个属性无效以及错误类型(例如必需)。 如果你有结构化财产,那么它将如何运作呢?
基本上了解如何正确验证模型类......
答案 0 :(得分:2)
以下方法不起作用!
我后来遇到了问题。我现在不记得是什么。
我还没有找到这样做的“官方”方式。 这是我的解决方法:
class Credentials(ndb.Model):
"""
Login credentials for a bank account.
"""
username = ndb.StringProperty(required=True)
password = ndb.StringProperty(required=True)
def __init__(self, *args, **kwds):
super(Credentials, self).__init__(*args, **kwds)
self._validate() # call my own validation here!
def _validate(self):
"""
Validate all properties and your own model.
"""
for name, prop in self._properties.iteritems():
value = getattr(self, name, None)
prop._do_validate(value)
# Do you own validations at the model level below.
重载__init__
以调用我自己的_validate
函数。
我为每个属性调用_do_validate
,最后进行模型级验证。
为此打开了一个错误:issue 177。
答案 1 :(得分:0)
该模型有效,但您已指定需要title
和author
。因此,每次写入内容时都必须为这些属性提供值。
基本上你是想写一个空记录。
尝试:
book = Book()
title = "Programming Google App Engine"
author = "Dan Sanderson"
book_key = book.put()
答案 2 :(得分:0)
您可以尝试使用NDB在提升BadValueError
时使用的验证方法。
book = Book()
book._check_initialized()
当您尝试将条目放入数据存储区时,这会引发BadValueError
。