如何设置关键属性?

时间:2011-10-31 00:11:27

标签: google-app-engine google-cloud-datastore

我在python google app引擎中有这个类:

class Book(db.Model):
    name = db.StringProperty()
    belongsTo = db.Key()

我的问题是,我如何创建一个关键对象,例如我想说它属于id为1的人,我试过这个但它不起作用

b = foo.Book(name="foo book", belongsTo="1")
b.put()

我也尝试过做

belongsTo = key(1)

如何插入外键?

2 个答案:

答案 0 :(得分:3)

不是使用任意Key()(除非那是你想要的),而是定义你的Book模型,使它显式引用Person,就像这样(为了清晰起见,假装Person类)

class Person(db.Model):
    name = db.StringProperty()

class Book(db.Model):
    name = db.StringProperty()
    belongsTo = db.ReferenceProperty(Person)

然后你可以做类似的事情:

book = Book.get(book_key)
owner_name = book.belongsTo.name

person = Person.get(person_key)
books_owned_by_person = person.book_set.get()

请参阅Types and Property Classes App Engine文档。

答案 1 :(得分:1)

从Moishe的答案中取出模型:

class Person(db.Model):
    name = db.StringProperty()

class Book(db.Model):
    name = db.StringProperty()
    belongsTo = db.ReferenceProperty(Person)

这是您将外键Person分配给Book的方式:

person_key = db.Key.from_path('Person', '1')   # '1' is key name of person

book = Book(name = 'foo book', belongsTo = person_key)