1

我正在使用谷歌应用引擎,我正在尝试使用代码插入实体/表:

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,但我看不出我错在哪里。

4

2 回答 2

2

您链接到的所有文档都使用关键字参数:

a = Tu(title='tests', presentation='blablablah')

如果使用位置参数,第一个参数被解释为父参数,它需要是 Model 或 Key 类型。

于 2013-01-14T16:45:45.747 回答
2

当您以这种方式创建模型时,您需要为模型的所有属性使用关键字参数。这是来自 的__init__签名片段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参数,并且因为该参数需要一个类型的对象(我假设您没有'没有),你得到那个错误。假设您改为尝试将这些项目添加为and ,您会说(正如@DanielRoseman 已经简洁陈述的那样:)):__init__bla bla bla blakey_nameModeltitlepresentation

a = Tu(title='teste', presentation='bla bla bla bla')
于 2013-01-14T16:46:50.900 回答