1
我有一個GAE應用程序,它使用NDB數據存儲和python向僱員分配任務。我有具有任務數組的任務實體和員工實體(存儲任務的密鑰)。我試圖實現一個「級聯刪除」,在這裏我可以通過我的刪除功能刪除任務的關鍵,並將其「級聯」到員工實體以清除對該任務的引用。現在我的刪除任務功能正常工作,但不能正確級聯。當我刪除一項任務並查看已分配該任務的員工時,其關鍵值仍顯示出來。我會非常感謝任何人都可以提供的指針!GAE,NDB,Python應用程序的「級聯刪除」
我的實體定義是在一個db_models文件,與任務實體(只包含名字作爲一個字符串)和僱員實體具有任務的數組:
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
我刪除功能,這點我想過去的'did'或要刪除的任務實體的密鑰
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()
,我不明白你爲什麼把它與一個字符串'做'比較? – marcadian
對不起,忘了添加main.py部分,我實際上稱之爲東西!我使用curl來測試函數,並且是我傳入的任何密鑰。Im現在手動跟蹤我的任務鍵並直接傳入它們。這是從我的主app.router.add(webapp2.Route(r'/任務/<:/?> /delete','task.TaskDelete')) –
ChristinaLindsay
您通過查詢獲取員工,如果這發生在更新,你會發現最終的一致性可能意味着你有陳舊的價值。爲了證明/反駁這個獲取你更新的實體的關鍵,並看看是否是這個問題。 –