【问题标题】:Deleting Entities in NDB last child is always being deleted删除 NDB 中的实体最后一个孩子总是被删除
【发布时间】:2015-10-10 05:12:19
【问题描述】:

我的模型类似于 Python GAE(问候语和作者)文档中的示例。我在删除时遇到了问题,因为它始终是被删除的最后一个孩子,而不是我所针对的实体。

class Delete(webapp2.RequestHandler):
     def post(self):
         greeting_key = ndb.Key(urlsafe=self.request.get('for_deletion')) #it's the key's urlsafe that is being passed here
         greeting_key.delete()
         self.redirect('/events')

这是生成请求的代码 sn-p:

               self.response.write('''<br><br><form action="/delete" method="post">        
                   <input type="hidden" name="for_deletion" value="%s">
                   <input type="submit" value="Delete Most Recent Info"><br><br>
               <form>
               ''' % post.key.urlsafe())

【问题讨论】:

  • 如果不查看您的 for_deletion 参数内容是什么,我们将很难调试。生成此请求的代码是什么样的?
  • @Josh 其实是隐藏输入。该值是 key.urlsafe。我可以向您展示 bit bucket 中的整个代码。
  • 我做了进一步的调试,我得出的结论是ndb删除函数没有问题,但是在html中self.request.get('for_deletion')返回的值生成请求的页面。我会在完成后立即更新。

标签: python-2.7 google-app-engine google-cloud-datastore webapp2


【解决方案1】:

问题源于我有很多名为“for_deletion”的隐藏输入。服务器脚本选择队列中的最后一个,这就是我要删除最后一个孩子的原因。

我已经修改了生成请求的 html 页面,在某种意义上,我使用 javascript 询问用户他/她是否想删除数据,然后我会继续发送一个带有名为“for_deletion”的隐藏输入的表单”。这样,我将确保只有一个 html 元素 name="for_deletion"。

这里是js文件的代码sn-p:

         document.body.innerHTML += '<form id="dynForm" action="/delete" method="post"><input type="hidden" name="for_deletion" value=' + urlsafe + '></form>';
         document.getElementById("dynForm").submit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多