Python ndb ValueError:需要超过1个值才能解包
我试图从Python ndb ValueError:需要超过1个值才能解包,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我试图从数据存储中检索一个实体,然后向它的一个属性添加一个值,但收到一个错误消息 value错误:需要超过1个值才能解包 我从一个RequestHandler执行这个操作。这是我的代码 class AddNewEmployeeHandler(webapp2.RequestHandler): def post(self): employee_name = self.request.get('employee_id') callback =self.request.get('call
数据存储中检索一个实体,然后向它的一个属性添加一个值,但收到一个错误消息
value错误:需要超过1个值才能解包
我从一个RequestHandler
执行这个操作。这是我的代码
class AddNewEmployeeHandler(webapp2.RequestHandler):
def post(self):
employee_name = self.request.get('employee_id')
callback =self.request.get('callback')
employee = Employee.get_by_id(employee_name)
if employee:
self.error(409)
else:
dept = Department.get_or_insert(key_name="Other Charges")
dept.employees.append(employee)
dept.put()
其他费用
是数据存储中已存在的实体的id/名称,员工
是定义为的部门
类的属性
employees=ndb.keyProperty(repeated=True)
我从表单中获取employee_id
的值。我曾试图在网上找到解决方案,但我发现抛出错误的原因很多,其中没有一个与我的问题类似。有没有关于为什么会发生这种情况的建议
编辑
部门员工需要密钥,而您正在传递一个员工实体,它应该是:
dept.employees.append(employee.key)
若要直接添加员工实体,应在部门模型中按以下方式定义:
employees = StructuredProperty(Employee, repeated=True)
这取决于您想要如何构造应用程序数据模型,看起来您正在调用get\u或\u insert
,其中key\u name作为关键字参数。但是,它希望它作为一个位置参数。试试这个:
dept = Department.get_or_insert("Other Charges")
我打赌您添加了一些带有employees=ndb.keyProperty()
的实体,然后添加了repeated
参数。如果是这种情况,您可以使用此SO答案来检索原始实体并修复数据我在添加实体后没有添加repeated
参数。但是我先创建了一个Department
实体,但没有employees
属性,然后从数据存储中删除了该实体,然后创建了一个新实体,这一次在添加了employees
属性后,因此employees.key
只获取员工实体的密钥?绝对,它返回一个KeyProperty值,这是您在部门模型中定义的值。我认为KeyProperty
对于我的项目来说更可取,因为使用StructuredProperty
选项,对象将没有自己的ID或keyI没有。我尝试了您给我的解决方案,虽然错误已经消失,但我仍然无法向实体添加值。不过,我正在开发一些新的工具来测试此解决方案。