我需要在我的应用程序中保存每个用户的设置。
我尝试将用户用作我的设置对象的父级,但由于用户没有密钥,我无法执行此操作。 然后我在我的设置对象中创建了一个实例,该实例具有对用户属性的引用,但在文档中,如果用户更改了其电子邮件地址,则表示UserProperty不稳定。 然后我决定将user_id保存在StringProperty()中,但如果用户使用OpenId登录,则user_id元素为None。
有没有办法将用户设置绑定到适用于Google帐户和open_id帐户的用户对象?
答案 0 :(得分:0)
无法在Google帐户/ open_id帐户周围添加包装类,以便您可以使用父关系吗?如下所示:
UserWrapper(db.Model):
user = db.UserProperty()
UserSettings(db.Model):
...
# New User
user = users.get_current_user()
new_user_settings = UserSettings(...)
new_user_wrapper = UserWrapper(key=user.nickname(),
parent=new_user_settings,
user=user)
# Login Existing User
user = users.get_current_user()
user_wrapper = UserWrapper.get_by_key_name(user.nickname())
user_settings = user_wrapper.parent()
如果用户想要更改其电子邮件地址,请使用旧电子邮件查找UserSettings,删除关联的UserWrapper,为新电子邮件地址创建新的UserWrapper并与旧的UserSettings关联。
注意我已将UserSettings设为UserWrapper的父级,以防多个电子邮件地址与同一帐户相关联可能会引起您的兴趣。