【问题标题】:Django's get_or_create method returning non-existent dataDjango 的 get_or_create 方法返回不存在的数据
【发布时间】:2026-02-19 20:20:04
【问题描述】:

我有一个名为 Service 的模型,其中有一个名为 Service1 的对象。我在 shell 中得到以下信息:

$ obj, created = Service.objects.get_or_create(name=u'Service1')
$ obj
  <Service: Service1>
$ obj.id
  3
$ created
  False
$ Service.objects.all()
  [<Service: Service1>]
$ Service.objects.first().id
  1

我检查了数据库,只有一个服务对象,即 id=1 的服务。为什么get_or_create 检索一个甚至不存在的对象?

【问题讨论】:

  • Service.objects.get(id=3) 的结果是什么?
  • @JerinPeterGeorge DoesNotExist: Service matching query does not exist.
  • 您的Service 模型是否有自定义管理器?
  • @MohitSolanki 它没有。我使用models.Manager。没有覆盖
  • @almanegra 你所有的模型都有这种行为吗?

标签: python django django-1.8


【解决方案1】:

问题在于缓存。我正在使用数据库的新转储,但我忘记了使缓存无效。 Django 正在检索一个不再存在但会在旧数据库中找到的对象。

【讨论】: