Под ссылочным свойством вы, вероятно, подразумеваете ключевое свойство. Это ссылка на другой объект хранилища данных. Он присутствует как в db, так и в ndb API. Используя их, вы можете смоделировать отношение «многие к одному», указав многим объектам ключ другого объекта.
Структурированная собственность — это совершенно другой зверь. Он позволяет вам определить структуру данных, а затем включить ее в другой объект.
Вот пример из документации, где вы указываете несколько адресов для одного контакта:
class Address(ndb.Model):
type = ndb.StringProperty() # E.g., 'home', 'work'
street = ndb.StringProperty()
city = ndb.StringProperty()
class Contact(ndb.Model):
name = ndb.StringProperty()
addresses = ndb.StructuredProperty(Address, repeated=True)
guido = Contact(name='Guido',
addresses=[Address(type='home',
city='Amsterdam'),
Address(type='work',
street='Spear St',
city='SF')])
guido.put()
Для вашего конкретного приложения я бы рекомендовал использовать NDB (всегда лучше использовать последнюю доступную версию API) со следующим:
Модель публикации включена в модель проекта как повторяющееся структурированное свойство. Пользователи включают повторяющееся свойство KeyProperty, содержащее ключи проектов, на которые у них есть разрешения.
Чтобы сделать это немного сложнее, вы можете создать другую модель для представления проектов и разрешений/ролей, а затем включить ее как повторяющееся структурированное свойство в пользовательскую модель.
Основная причина, по которой вы хотите сохранить ключи, заключается в том, чтобы данные были доступны в свете возможной согласованности HRD.
Дайте мне знать, если вам нужна дополнительная помощь по этому вопросу.
РЕДАКТИРОВАТЬ:
Чтобы уточнить, вот предлагаемая структура:
Модели:
- Пользователь
- User-Project-Mapping (необязательно, необходимо для обработки разрешений)
- Проект
- Почта
Пользовательская модель должна содержать User-Project-Mapping как повторяющееся структурированное свойство.
Модель проекта должна содержать Post как повторяющееся структурированное свойство.
User-Project-Mapping должен содержать только ключевую ссылку на проект и соответствующее представление разрешений.
Поскольку это звучит как коммерческий проект, если вам нужна дополнительная помощь, я с удовольствием проконсультирую вас. Надеюсь, у вас есть достаточно, чтобы добиться успеха!
28.12.2012