我正在使用谷歌应用引擎,我正在尝试使用代码插入实体/表:
class Tu(db.Model):
title = db.StringProperty(required=True)
presentation = db.TextProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
last_modified = db.DateTimeProperty(auto_now=True)
。 。
a = Tu('teste', 'bla bla bla bla')
a.votes = 5
a.put()
但是我收到了这个错误:
TypeError: Expected Model type; received teste (is str)
我正在关注此文档https://developers.google.com/appengine/docs/python/datastore/entities而我看不出我错在哪里。
答案 0 :(得分:2)
您链接到所有使用关键字参数的文档:
a = Tu(title='tests', presentation='blablablah')
如果使用位置参数,则第一个参数被解释为父类,它必须是Model或Key类型。
答案 1 :(得分:2)
以这种方式创建模型时,需要对模型的所有属性使用关键字参数。以下是来自__init__
的{{1}}签名的摘要,您的db.Model
模型继承了该签名:
Tu
当您说def __init__(self,
parent=None,
key_name=None,
_app=None,
_from_entity=False,
**kwds):
"""Creates a new instance of this model.
To create a new entity, you instantiate a model and then call put(),
which saves the entity to the datastore:
person = Person()
person.name = 'Bret'
person.put()
You can initialize properties in the model in the constructor with keyword
arguments:
person = Person(name='Bret')
# continues
时,由于您没有提供关键字参数而是将它们作为位置参数传递,a = Tu('teste', 'bla bla bla bla')
被分配给teste
中的parent
参数}(和__init__
到bla bla bla bla
)因为那个参数需要一个key_name
类型的对象(我假设你没有),你就会得到那个错误。假设您尝试将这些项目添加为Model
和title
,您会说(正如@DanielRoseman已经简洁地说过:)):
presentation