我有两个班级,Department
和Employee
。 Department
有一个声明为
employees = ndb.KeyProperty(kind=ClassB, repeated=True)
问题是,当我删除其密钥保存在employees
列表中的实体时,该实体将在Employee
数据存储区中删除,但Department
数据存储区中的列表仍然是相同(已删除员工的密钥仍在其中)。
如何确保删除Employee
时,Department
数据存储区中对它的所有引用都会被删除?
答案 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