App Engine, перекрестная ссылка между двумя объектами - PullRequest
1 голос
/ 29 ноября 2010

Мне бы хотелось, чтобы два типа сущностей ссылались друг на друга. но python еще не знает об имени второго класса сущности в теле первого. так как мне кодировать.

class Business(db.Model):
  bus_contact_info_ = db.ReferenceProperty(reference_class=Business_Info)

class Business_Info (db.Model):
  my_business_ =  db.ReferenceProperty(reference_class=Business)

если вы советуете использовать ссылку только в одном и использовать неявно созданное свойство (который является объектом запроса) в другом. Затем я подвергаю сомнению штрафную квоту ЦП, связанную с использованием запроса и прямого использования get () для ключа

Пожалуйста, посоветуйте, как написать этот код на Python

1 Ответ

4 голосов
/ 29 ноября 2010

Запросы немного медленнее, и поэтому они используют немного больше ресурсов. ReferenceProperty не требует reference_class. Таким образом, вы всегда можете определить бизнес как:

class Business(db.Model):
  bus_contact_info_ = db.ReferenceProperty()

Там также могут быть лучшие варианты для вашей структуры данных. Посмотрите статью Моделирование отношений для некоторых идей.

Это отображение один-к-одному? Если это сопоставление «один к одному», возможно, вам лучше денормализовать ваши данные.

Это когда-нибудь меняется? Если нет (и это один-к-одному), возможно, вы могли бы использовать группы сущностей и структурировать свои данные так, чтобы вы могли просто напрямую использовать ключи / имена ключей. Вы могли бы сделать это, сделав BusinessInfo дочерним предприятием Business, а затем всегда использовать «i» в качестве имени ключа. Например:

business = Business().put()
business_info = BusinessInfo(key_name='i', parent=business).put()

# Get business_info from business:
business_info = db.get(db.Key.from_path('BusinessInfo', 'i', parent=business))

# Get business from business_info:
business = db.get(business_info.parent())
...