我的解决方案依赖三个方面:
-
第一:可以覆盖模型的
put()
方法。
-
第二:
users.get_current_user()
仍然提供正确的用户,以及
-
第三:
ragendja.auth.google_models.User.get_djangouser_for_user()
采取了
google.appengine.api.users.user
对象并返回相应的django用户对象-如果该对象不存在,则首先创建它。
把这些放在一起,我有:
class Request(db.Model):
requestor = db.ReferenceProperty(User)
def put(self):
if not self.requestor:
self.requestor = User.get_djangouser_for_user(users.get_current_user())
super(Request, self).put()
这与管理界面很好地配合:管理员可以分配任何现有用户(或使用提供的+符号创建新用户)-如果保留为空,他们将被分配为请求者。
稍后,当我为用户添加一个视图来管理他们自己的请求时,这个值将在“排除”列表中,并且相同的方法将在他们每次创建新请求时添加到他们的用户名中。
不过,我不确定这是否是一个最佳解决方案;我刚接触Django,所以可能有更好的方法来实现这一点。