python - 如何将实体的父级设置为属性?

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

我想做这样的事情:

e = Employee(key_name = 'john',name='john the first')
e.put()
a = Address(key_name='addr_john',street='66th street')
a.parent = e;
a.put();

addr = Address.gql("WHERE ANCESTOR IS :1", e).fetch(1) #len(addr)==0

但它不起作用,如果我在构造函数中设置父级,它就会起作用。

a = Address(key_name='addr_john',street='66th street',parent=e)

但我不想这样做,我需要在创建对象后这样做。

最佳答案

实体的父级只能在其创建期间设置,因此只能在db.Model子类实例的构造函数中设置。尝试分配给 db.Model 实例的 parent 属性将导致其 parent() 函数被覆盖,但相应数据存储的实际父级实体不会改变。

如果在创建子对象时无法建立关系,则应考虑将其编码为普通属性。 或者(如果由于您需要的事务而无法承担没有父子关系的后果)您可以尝试推迟子对象的创建,直到您可以确定它应该具有哪个父对象。由于显然您还使用父数据(即 Employeename)为子实体建立 key_name,因此这种方法似乎是有意义的。 (键名,如父项,也只能在实体创建期间设置)。

关于python - 如何将实体的父级设置为属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243440/

相关文章:

python - Django: SystemError: <built-in function uwsgi_sendfile> 返回了一个带有错误集的结果

google-app-engine - 数据存储区 : invalid entity type on get

google-app-engine - 数据存储中真的需要索引吗?

python - 使用 Colab 访问本地文件夹

python - ir.attachment在不同型号可以查看不同方式

eclipse - 使用谷歌应用引擎时,更改不会反射(reflect)在本地主机中

google-app-engine - GAE : AssertionError: No api proxy found for service "datastore_v3"

python - 应用程序引擎,Python : problem updating datastore record

Python没有在pygame中进入for循环

jquery - 使用 jquery/python GAE 破坏 PUT 请求