使用Django'时实现自动添加当前用户;s用户表
我有一个AppEngine应用程序,我正在迁移到Django中运行,用来获得Django的所有优点,特别是管理界面 我的一个模型看起来(部分)如下: 当我显示基于此模型的表单时,我不显示请求者字段,因此当我调用模型的使用Django'时实现自动添加当前用户;s用户表,django,google-app-engine,django-models,django-admin,Django,Google App Engine,Django Models,Django Admin,我有一个AppEngine应用程序,我正在迁移到Django中运行,用来获得Django的所有优点,特别是管理界面 我的一个模型看起来(部分)如下: 当我显示基于此模型的表单时,我不显示请求者字段,因此当我调用模型的put()方法时,我保存的实体没有设置请求者属性。这将触发自动添加当前用户,并自动添加创建请求的用户 在Django下,我使用提供的Users表。我想将其显示为我的应用程序的用户列表,因此模型将变为: from ragendja.auth.google_models import U
put()
方法时,我保存的实体没有设置请求者属性。这将触发自动添加当前用户,并自动添加创建请求的用户
在Django下,我使用提供的Users表。我想将其显示为我的应用程序的用户列表,因此模型将变为:
from ragendja.auth.google_models import User
class Request(db.Model):
requestor = db.ReferenceProperty(User)
但是,这打破了管理界面中的auto\u current\u user\u add
魔术-如果管理界面的用户没有为requestor属性输入值,Django将属性设置为None,而我真的希望请求自动插入他们的用户名
如何恢复魔法?我的解决方案依赖于三件事:
- 第一:可以覆盖模型的
方法put()
- 第二:
仍然提供正确的用户,并且users.get\u current\u user()
- 第三:
获取一个ragendja.auth.google\u models.User.get\u djangouser\u for\u User()
对象并返回相应的Django用户对象-如果该对象不存在,首先创建它google.appengine.api.users.User.User
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的新手,所以也许有更好的方法来实现这一点
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()