变异ndb重复属性

时间:2014-04-27 09:47:43

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

我有两个班级,DepartmentEmployeeDepartment有一个声明为

的属性

employees = ndb.KeyProperty(kind=ClassB, repeated=True)

问题是,当我删除其密钥保存在employees列表中的实体时,该实体将在Employee数据存储区中删除,但Department数据存储区中的列表仍然是相同(已删除员工的密钥仍在其中)。

如何确保删除Employee时,Department数据存储区中对它的所有引用都会被删除?

2 个答案:

答案 0 :(得分:1)

没有自动的方法。

您需要对可以保存密钥的所有类型执行查询,然后在代码中删除它们。

如果可能有很多和/或可能需要很长时间,您可能需要考虑使用任务。

答案 1 :(得分:1)

我终于找到了这样做的方法。我在class A (Department)这样创建了一个方法

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

然后从Handler(也可能是某个地方的另一种方法)我从列表中删除密钥,我做了类似的事情

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)  #delete employee key from list
    employee.key.delete()  #then finally delete employee entity