我有许多不同的模型(ModelA、ModelB),其中包括一个引用通用模型(ModelC)实体的 KeyProperty。我有一个方法需要使用 ModelA 和 ModelB 的多个实例引用的实体进行一些处理,但是每个模型的 KeyProperty 命名不同,并且应该因为它们在 ModelA 和 ModelB 中扮演根本不同的角色。我需要使用引用 ModelC 的 KeyProperty 进行的处理是 ModelA 和 ModelB 的相同实体列表,所以我应该能够定义一个可以在两者上调用的通用方法,但是我如何告诉该方法使用哪个属性?
我可以使用模型的 property 属性从实体中检索该属性的值吗?
我已经广泛阅读了 NDB 上的 App Engine 文档,但我无法弄清楚如何做到这一点。要么它非常微不足道,要么我错过了文档中的某些内容,但我无法解决这个问题。
我将在下面提供一个简单的示例:
楷模:
class ModelA(ndb.Model):
name = ndb.StringProperty()
last_model_c = ndb.KeyProperty(kind='ModelC')
...
class ModelB(ndb.Model):
sku = ndb.StringProperty()
first_use_model_c = ndb.KeyProperty(kind='ModelC')
...
class ModelC(ndb.Model):
...
调用处理:
...
q = ModelA.query()
...
self.model_c_scan(q.fetch(), ModelA.last_model_c)
...
q = ModelB.query()
...
self.model_c_scan(q.fetch(), ModelB.first_use_model_c)
加工:
...
def model_c_scan(entity_list, property)
...
for entity in entity_list:
model_c_key = <get the entity's value for the property>
model_c = model_c_key.get()
...