このシナリオでは、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')
これは私がする必要があることの単純化された例ですが、それをかなりうまく捉える必要があります.JSON文字列として自分自身を表現できるようにする必要があります.Companyは他のクラス(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"}
したがって、properties() には期待どおりにエンティティのプロパティが含まれますが、関連付けられたオブジェクトの 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 に StringProperty を含めることもできませんでした)。 'offices' という名前) であるため、それらを列挙する方法が必要です。誰でも方法を知っていますか?