Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Django'时实现自动添加当前用户;s用户表_Django_Google App Engine_Django Models_Django Admin - Fatal编程技术网

使用Django'时实现自动添加当前用户;s用户表

使用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

我有一个AppEngine应用程序,我正在迁移到Django中运行,用来获得Django的所有优点,特别是管理界面

我的一个模型看起来(部分)如下:

当我显示基于此模型的表单时,我不显示请求者字段,因此当我调用模型的
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()
    获取一个
    google.appengine.api.users.User.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的新手,所以也许有更好的方法来实现这一点

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()