【问题标题】:Why Model.objects.create() updates existing records为什么 Model.objects.create() 会更新现有记录
【发布时间】:2014-02-01 13:30:42
【问题描述】:

我正在使用 django 1.4。但我不明白为什么Model.objects.create() 方法会在创造新价值的同时更新现有记录。

我使用Mode.objects.create() 尝试相同的case 但失败了,因为它还会更新现有记录。这似乎是 django ORM 架构的缺陷。

【问题讨论】:

  • 您能提供更多信息吗?默认情况下,它不应该更新任何现有记录,除非有东西正在监听保存信号并为您修改它。
  • 那么,成千上万的项目使用 Django,直到现在他们都没有发现这个巨大的错误?或者它可能是你的代码,你没有向我们展示,但它是由对框架一无所知的人编写的,这是有问题的?
  • 这是我的错,因为我的模型上有一个通用的 post_save 信号来更新记录。非常抱歉责怪框架。
  • 当我第一次被计算机工程系录取时,我们常常把我们遇到的所有错误都归咎于编译器(当时他们正在教我们 c++)。每次都证明是我们的错 :) 我只记得这一点。

标签: django django-models django-queryset


【解决方案1】:

情况不应该如此。 Model.objects.create 不应更新现有记录。我认为您在这里还有其他问题,可能是执行此操作的自定义 create 或负责副作用的 django 信号。

要调试这个问题,我建议您使用connection.queries 来查看从 ipython 或 django shell 发出的 SQL 类型。运行python manage.py shell 并运行:

> from django.db import connection
> # Clear query list first
> connection.queries = []
> Model.objects.create()
> # See which queries are executed:
> print connection.queries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2016-12-20
    • 1970-01-01
    • 2011-07-28
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多