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没有。我尝试了您给我的解决方案,虽然错误已经消失,但我仍然无法向实体添加值。不过,我正在开发一些新的工具来测试此解决方案。