TypeError:键ID必须是字符串或数字

时间:2014-04-28 08:53:39

标签: python google-app-engine app-engine-ndb

我正在尝试从列表中删除key值。所以我在我的班级中创建了一个方法,如下所示:

def deleteEmployee(self, employee):
    employee_to_Delete = ndb.Key(Employee, employee)
    if employee_to_delete in self.employees:
        idx=self.employees.index(employee_to_delete)
        del self.employees[idx]
        self.put()

然后在我调用此方法的方法中,我有类似

的方法
class DeleteEmployeeHandler(webapp2.RequestHandler):
def post(self):
    employee_name = self.request.get('employee_name')
    employee=Employee.get_by_id(employee_name)
    emp_dept=employee.department
    dept=Department.get_or_insert(emp_dept)
    dept.deleteEmployee(employee)
    employee.delete()

但我收到错误消息

TypeError: key id must be a string or a number。有人可以告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

employeeEmployee类的一个实例,您将其作为第二个参数传递给ndb.Key。但错误消息告诉您确切的错误:该参数应该是字符串或int,而不是实例。

但是,既然你已经拥有了实例,那么你就不需要构建一个新的Key:employee对象已经有了一个,你可以用来删除它。

employee_to_Delete = employee.key

答案 1 :(得分:1)

您得到的错误来自google's datastore,而不是来自Python的列表。

您致电ndb.Key(Employee, employee)我的猜测是您传入的employee类型错误。