У меня есть приложение GAE, использующее хранилище данных NDB и python, которое назначает задачи сотрудникам. У меня есть объекты задач и объекты сотрудников, которые имеют массивы задач (хранящие ключи задач). Я пытаюсь реализовать «каскадное удаление», при котором я могу передать моей функции удаления ключ удаляемой задачи и «каскадировать» ее для объектов сотрудников, чтобы очистить ссылки на эту задачу. Прямо сейчас моя функция удаления задачи работает нормально, но она не каскадируется правильно. Когда я удаляю задачу и проверяю сотрудника, которому была назначена эта задача, ее значение ключа по-прежнему отображается. Я был бы очень признателен за любые указатели, которые кто-либо может предоставить!
Мои определения сущностей находятся в файле db_models с сущностями Task (состоящими только из имени в виде строки) и сущностями Employee, которые имеют массивы задач:
class Employee(ndb.Model):
name = ndb.StringProperty(required=True)
title = ndb.StringProperty(required=True)
tasks = ndb.KeyProperty(repeated=True)
def to_dict(self):
d = super(Employee, self).to_dict()
d['tasks'] = [m.id() for m in d['tasks']]
return d
Моя функция удаления, которой я передаю «сделал» или ключ объекта «Задача» для удаления
class TaskDelete(webapp2.RequestHandler):
def get(self, **kwargs):
if 'application/json' not in self.request.accept:
webapp2.abort(406, details="Not Acceptable, API only supports application/json MIME type")
return
if 'did' in kwargs:
entity = ndb.Key(db_models.Task, int(kwargs['did'])).delete()
q = db_models.Employee.query()
key = q.fetch(keys_only=True)
for x in key:
employee = ndb.Key(db_models.Employee, int(x.id())).get()
for task in employee.tasks:
if 'did' == task:
task.delete()
employee.put()