的反向引用在這種情況下,company.py包含:如何枚舉實體
from django.utils import simplejson
class Company(db.Model):
name=db.StringProperty()
address=db.StringProperty()
def to_JSON():
d = dict([(p, unicode(getattr(self, p))) for p in self.properties()])
return simplejson.dumps(d)
office.py包含:
from company import Company
class Office(db.Model):
name = db.StringProperty()
company = db.ReferenceProperty(Company, collection_name='offices')
模塊3包含:
from company import Company
class Region(db.Model):
name = db.StringProperty()
company = db.ReferenceProperty(Company, collection_name='regions')
這是我需要做的一個簡化例子,但應該很好地捕捉它......我需要Company能夠將自己表達爲JSON字符串,並且它不知道引用它的其他類(Office和Region)。這適用於正常的性質:
c = Company(name='A Company',address='123 Main St, New York, NY 12345')
c.put()
dallas = Office(name='Dallas',company=c)
dallas.put()
ny = Office(name='New York',company=c)
ny.put()
northeast = Region(name='NorthEast',company=c)
northeast.put()
southwest = Region(name='SouthWest',company=c)
southwest.put()
logging.info('Company as JSON: %s' % c.to_JSON())
而我得到的輸出是:
{"name": "A Company", "address": "123 Main St, New York, NY 12345"}
因此屬性()包括實體的屬性如預期,但我也希望包括背來自關聯對象的ReferenceProperty屬性的引用。基本上我在尋找的只是後臺引用(collection_name)名稱的列表,因爲我知道它們代表查詢,但我找不到任何方法來枚舉後臺引用名稱本身。
記住這段代碼實際上並不代表真實的代碼,它大大簡化了。現在,這個工程:
offices = getattr(company, 'offices')
所以我期待看到的是:
{"name": "A Company", "address": "123 Main St, New York, NY 12345",
"offices": "<db.Query object at 0x110e992d0>",
"regions": "<db.Query object at 0x110e99300>"
}
我實際上並不需要的反向引用「辦公室」和「區域」被列入在properties()枚舉中,但它們以某種方式檢查唯一性(例如,我不能在Company中爲'offices'指定一個StringProperty),所以必須有枚舉它們的方法。任何人都知道一種方式?