如何在GAE上确定多态实体的子模型?

时间:2012-11-10 12:38:27

标签: python google-app-engine google-cloud-datastore data-modeling

这就是我查询联系人的方式:

contacts = Contact.all()

然后,如何确定联系人是具有以下结构的人员还是公司?

class Contact(polymodel.PolyModel):
    phone_number = db.PhoneNumberProperty()
    address = db.PostalAddressProperty()

class Person(Contact):
    first_name = db.StringProperty()
    last_name = db.StringProperty()
    mobile_number = db.PhoneNumberProperty()

class Company(Contact):
    name = db.StringProperty()
    fax_number = db.PhoneNumberProperty()

2 个答案:

答案 0 :(得分:1)

你可以用不同的方式获得种类和类名

instance._class将返回['Contact', 'Person']

instance.class_name()返回Person

instance.kind()返回Contact

答案 1 :(得分:1)

您可以使用PolyModel类方法class_name()。引用App Engine文档:

  

PolyModel.class_name()

     

返回类的名称。如果Python类的名称发生更改,则类可以重写此方法,但实体应继续使用原始类名。

在您的代码中,如果插入两个对象,如下所示:

p = Person(first_name='John',
           last_name='Doe',
           mobile_number='1-111-111-1111')
p.put()

c = Company(name='My company',
            fax_number='1-222-222-2222')
c.put()

然后通过执行:

获取所有对象并打印类名
for c in Contact.all():
    logging.info('Class Name: ' + c.class_name())

<强>输出:

班级名称:人

班级名称:公司

有关PolyModel类的信息,请查看The PolyModel Class