我正在使用Django和Google App Engine。在某些时候,我创建了两个对象。其中一个对象是另一个对象的引用属性。目前,我正在做
b = models.B()
b.put()
a.reference = b
a.put()
理想情况下,我只想使用db.put([a, b])
,但对象b
在将其分配给对象a
的属性时缺少密钥。
在将对象b
实际放入数据存储之前,我能以某种方式给对象一个密钥吗?
答案 0 :(得分:2)
您可以使用B(key=ndb.Key(B, 'custom_key'))
等自定义键,这样就可以引用此属性,即使它尚不存在。
如果您希望使用数字键,请先使用custom_key = B.allocate_ids(1)
。
https://developers.google.com/appengine/docs/python/ndb/entities#numeric_keys
修改强>
对于db,你需要这样的东西:(虽未测试)
start_batch, end_batch = db.allocate_ids(db.Key.from_path('B', 1), 1)
assert start_batch == end_batch
b = models.B(key_name=start_batch)
a.reference = db.Key.from_path('B', start_batch)
db.put([a, b])