Скажем, у вас есть понятие "пользовательских" записей, которые вы хотели бы хранить в хранилище данных.
class User (db.Model):
first_name = db.StringProperty()
last_name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)
twitter_oauth_token = db.StringProperty()
twitter_oauth_secret = db.StringProperty()
Есть некоторые поля, которые вы хотели бы использовать почти каждый раз, когда используете пользовательский объект, например first_name и last_name.
Однако есть некоторые поля, у которых есть только один вариант использования, например, twitter_oauth_token и twitter_oauth_secret, и несколько неэффективно использовать их для сериализации и десериализации, когда они не нужны в 95% случаев.
Итак, если вы разделите свою модель на:
class User (db.Model):
first_name = db.StringProperty()
last_name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)
class UserTwitterOauth(db.Model):
oauth_token = db.StringProperty(required=True)
oauth_secret = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
Вы можете поместить ReferenceProperty для Пользователя в UserTwitterOauth, но на самом деле это будет один-ко-многим, поскольку ничто не останавливается на том, чтобы быть несколькими объектами UserTwitterOauth на Пользователя. Вы хотите, чтобы не более одного UserTwitterOauth было связано с любым пользователем. Как вы можете связать эти модели один на один?