【问题标题】:DoesNotExist: object matching query does not existDoesNotExist:对象匹配查询不存在
【发布时间】:2013-07-27 18:09:59
【问题描述】:

当我执行“object_name.objects.get(id=1)”时出现错误。早些时候,当 id=1 时我也收到了这个错误,但是当 id=2 时它返回了对象。然后我删除了我所做的所有条目,希望它会从 id=1 开始,但现在它给出了错误。

有人能解释一下为什么会这样吗?我该怎么办?

>>> from course.models import Course, Content

>>> Course.objects.get(id=1)

Traceback (most recent call last):

  File "<console>", line 1, in <module>

  File "/home/vagrant/edu-venv/local/lib/python2.7/site-packages/django/db/models    /manager.py", line 143, in get
    return self.get_query_set().get(*args, **kwargs)

  File "/home/vagrant/edu-venv/local/lib/python2.7/site-packages/django/db/models    /query.py", line 389, in get
    (self.model._meta.object_name, kwargs))

DoesNotExist: Course matching query does not exist. Lookup parameters were {'id': 1}

另外,object_name.object.all() 给出了我输入的所有内容

>>> Course.objects.all()
[<Course: JAVA>, <Course: HTML5>]

【问题讨论】:

  • 很自然,你要做的就是应用tryexcept,那个函数处理那个问题
  • 在您的 shell 中执行以下操作:Course.objects.values_list('pk', flat=True),并查看为 2 个对象生成的 ID。你会知道为什么id=1 失败了
  • @catherine 我是初学者,你能详细说明一下吗?此外,如果您想查看 link 这是我试图排序的原始问题
  • @karthikr 老兄,它现在给 [7,6] 早于 [3, 2]

标签: django postgresql django-models django-views django-south


【解决方案1】:

每次创建对象时,数据库都会增加主键。如果您使用id=1id=2 创建对象,即使您删除现有对象,下一个对象也将始终具有id=3

【讨论】:

  • 那么从id = 1开始应该怎么做
  • 如果您愿意丢失所有现有数据,您可以删除数据库表并重新创建它以从零开始序列。我建议你不要担心。对象主键列表中是否存在“间隙”无关紧要。
  • 我应该如何删除我正在使用 vagrant 和 virtual box 的表。我做了 ./manage.py sqlclear 课程,它给出了 'BEGIN; DROP TABLE "course_course" DROP TABLE "course_content" 提交;'搞定了吗???
  • sqlclear 管理命令实际上并不删除表,它只是打印删除表语句。您需要在数据库 shell 中运行这些语句。请注意,上述命令将删除 Content 表以及 Course 表。
猜你喜欢
  • 2022-01-10
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2015-12-29
  • 2021-01-25
  • 2021-02-14
相关资源
最近更新 更多