我有许多不同的模型(ModelA,ModelB),其中包含一个引用公共模型(ModelC)实体的KeyProperty。我有一个方法需要使用由ModelA和ModelB的多个实例引用的实体进行一些处理,但每个模型的KeyProperty的命名方式不同,应该是它们在ModelA和ModelB中提供根本不同的角色。我需要使用KeyProperty引用ModelC的处理是ModelA和ModelB的相同实体列表,所以我应该能够定义一个可以在两者上调用的公共方法,但是如何告诉这个方法使用哪个属性?
我可以使用Model的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()
...
答案 0 :(得分:0)
我找到的解决方案是使用字符串指定Property的名称,只需使用python的getattr()
。
兼容ndb模型的纯python方法getattr()
的工作原理如下:
getattr(ModelName,'propertyName')