В этом сценарии 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, а она не знает о других классах (Office и Регион), которые ссылаются на него. Это работает для нормальных свойств:
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 (), но они как-то проверяются на уникальность (я не мог, например, также есть StringProperty в компании с именем «офисы»), поэтому должен быть способ перечислить их. Кто-нибудь знает способ?