【问题标题】:Python Django - matching query does not exist when using pkPython Django - 使用pk时不存在匹配查询
【发布时间】:2014-01-31 01:26:45
【问题描述】:

这里是 Django 和 Python 的新手,如果这很简单,请原谅我......

我正在尝试删除 MyClass 类型的对象,但由于某种原因,当我确信该对象确实存在时,我不断收到匹配查询不存在错误。

我写了一个如下所示的删除方法:

  def delete(self, request, format=None, *args, **kwargs):

    identifier = request.DATA.get('identifier', None)
    my_object = MyObjectClass.objects.get(pk=identifier)

    if my_object:
      my_object.delete()
    return Response(status=status.HTTP_200_OK)

当我这样做时,我收到消息 MyObjectClass 匹配查询不存在。

但是,当我运行 python manage.py shell 时,我可以通过这种方式检索对象:

my_object = MyObjectClass.objects.get(pk=1001)

这按预期工作......所以显然存储在该标识符变量中的任何内容都不正确,尽管我无法弄清楚原因。我的问题:我必须做一些类型转换才能让它工作吗?或者有没有人知道为什么这可能会破坏?

谢谢!

【问题讨论】:

  • 澄清:你说你写了一个“删除方法”。您的意思是基于 Django 函数的视图,对吗? (而不是覆盖模型的删除方法或其他东西)
  • 对...上面的代码在我发送DELETE请求时执行
  • aah 等等,这可能是基于类的视图的删除方法?当 Django 添加 CBV 时,一切都变得如此复杂......

标签: python django


【解决方案1】:

identifier 的值一定是错误的。尝试使用调试器——顶部的import pdb,然后在identifier = foo 下方放入断点行(pdb.set_trace())。然后使用manage.py runserver 运行开发服务器,当它遇到断点类型identifier 我很确定你会发现它不是1001。如果是这样,你需要弄清楚你的http请求有什么问题.

顺便说一下,我使用 request.GET 而不是 request.DATA;我不知道这是否有效。

【讨论】:

  • 它打印出 u'9743',虽然我不确定那个 U 来自哪里。你是不是觉得很眼熟?
  • 你只是意味着它是一个 unicode 字符串,应该没关系。 Django 在查询查找时自动进行类型转换。那么,当您使用my_object = MyObjectClass.objects.get(pk=9743) 时,它会起作用吗?
  • 啊,我刚刚用 request.GET 替换了 request.DATA,它现在似乎正在工作......我必须做一些研究才能找出原因。
  • 似乎 request.DATA 仍在开发中:code.djangoproject.com/ticket/21442 目前在 DELETE 请求中访问参数的标准方法是使用 GET:groups.google.com/forum/#!topic/django-users/inpRdwDJZUo
猜你喜欢
  • 2015-06-09
  • 2015-03-13
  • 2021-07-19
  • 1970-01-01
  • 2015-01-28
  • 2022-01-05
  • 2020-10-15
  • 2016-05-11
相关资源
最近更新 更多