我有个人资料类:
class profile(db.Model):
user = db.stringProperty()
# Other properties ...
access = db.ListProperty(db.keys)
class apps(db.Model):
name = db.StringProperty()
配置文件类在那里安静了一段时间,但我们最近添加了访问字段,它将存储应用程序的密钥。 现在我们在应用程序上添加配置文件权限,访问字段不会在模型中更新。
这完全适用于localhost,但是当我在服务器上更新它时,我收到此错误 “'NoneType'对象没有属性'access'” 有没有人遇到同样的情况
更新 弄清楚,profile类中的一个对象被返回为None。以下是在localhost上获取配置文件对象但在服务器上获取None的代码
liuser = users.User(request.POST['user'])
#request.POST['user'] gets user Gmail ID, which is being converted to user object
profiles=Profile.all().filter(" user =", liuser).get()
userprofile=profiles
#tried below code which returns "'NoneType' object has no attribute 'access'" on server, the same gets a profile object on localhost
if not hasattr(userprofile, "access"):
userprofile.access=[]
@Robert希望现在格式化正常。
谢谢 Sai Krishna
答案 0 :(得分:1)
我们能够解决这个问题。问题出在users.User对象上,它没有为gmail用户附加@gmail.com,但是它接受了其他具有域名的域,这就是抛出无类型对象
再次感谢您的帮助
答案 1 :(得分:0)
将属性添加到模型时,数据存储区中的模型的现有实例不会自动获取该属性。
您需要修改与配置文件实体交互的处理程序代码,以检查是否存在访问权限。 Python的hasattr
函数可以做到。像这样:
a_profile = profile.all().somequerystuffheretogetaninstance().get()
if a_profile is not None:
if not hasattr(a_profile, "access"):
a_profile.access = whateveryourdefaultdatais
# perform my data logic normally after this, but remember to persist
# this to the datastore to save the new access property.