当前位置: 首页 > 知识库问答 >
问题:

Django 在 save() 方法之后插入新对象,而不是更新

夏侯鹏
2023-03-14

当试图更新现有的Django模型对象时(使用< code>save()方法),会插入一个新行。

例如:

>>> import datetime
>>> from data_lib.models import Meal
>>> m = Meal(name="My First Meal!", description="this is my first meal's description")
>>> print m.mealid
None
>>> m.save()
>>> print m.mealid
None
>>> m.save()

在第二次调用< code>save()方法之后,一个重复的条目被插入到我的表中。

以下是模型定义的示例:

class Meal(models.Model):
    mealid = models.IntegerField(db_column='MealId', primary_key=True)
    name = models.CharField(db_column='Name', max_length=45, blank=True)
    description = models.CharField(db_column='Description', max_length=200, blank=True)

共有1个答案

姚星宇
2023-03-14

从詹戈文档 (1, 2):

主键字段是只读的。如果您更改现有对象的主键值并保存它,则将在旧对象旁边创建一个新对象。

问题在于模型对象的类定义一旦我将primary_key字段设置为自动字段,问题就消失了我的新模型定义如下:

class Meal(models.Model):
        mealid = models.AutoField(db_column='MealId', primary_key=True)
        name = models.CharField(db_column='Name', max_length=45, blank=True)
        description = models.CharField(db_column='Description', max_length=200, blank=True)

姜戈几乎完美的自动生成!

 类似资料:
  • 嗨,我是Spring Data JPA的新手,我想知道即使我将Id传递给实体,Spring data jpa也是插入而不是合并的。我想当我实现持久接口并实现这两个方法时: 它将自动合并而不是持久化。 我有一个名为User like的实体类: 再上一节课 我有一个名为UserRepostory的自定义存储库,它扩展了JpaReopistory。当我看到实现演示SpringDataJpa使用以上两种方

  • 问题内容: 我有一个简单的测试,尝试在其中更新对象,但是合并似乎在执行插入操作而不是更新操作。 } 这是我的更新方法 更新代码 现在,我收到以下错误无法提交JPA事务;嵌套的异常是javax.persistence.RollbackException:标记为rollbackOnly的事务 问题答案: 我有一个版本列,当种子数据插入数据库时​​未设置该列。因此,所有有关更新和删除的问题

  • 我有一个模型 视图定位对象: 然后它会做出一些改变(或者可能不会) 然后它尝试保存任何更改: 这里是Django尝试插入另一行而不是更新的地方,导致了一个DB错误 解决方案中有一种类似的问题: 一旦我将primary_key字段设置为自动字段,问题就消失了。 但是,我的主键已经是一个自动字段。 所以我用调试器逐步浏览了django代码,并在文件中资助了这个: 似乎如果没有更改(因此更新不做任何事情

  • 问题内容: 保存新记录(不更新现有记录)时,我想在Django模型对象的save()方法中触发特殊操作。 (self.id!= None)的检查是否必要且足以确保自我记录是新记录且不会被更新?有什么特殊情况可能会忽略吗? 问题答案: 澄清了不是私有实例变量,而是以避免冲突的方式命名,现在检查是更可取的检查方法。 在新的Model对象中返回True,除非该对象的为其。 你可能要担心的极端情况是除id

  • 问题内容: 编辑。在扩展基本存储库类并添加insert方法的同时,一个更优雅的解决方案似乎是在实体中实现Persistable。查看 可能的解决方案2 我正在使用Hibernate作为ORM 创建服务。 遵循本教程的基础。 http://www.petrikainulainen.net/spring-data-jpa- tutorial/ 我的实体存储库扩展 我正在使用使用有意义的主键而不是自动生

  • 问题内容: 假设我使用jQuery将新内容加载到特定的DIV元素中。如果现在我想从该DIV元素内部捕获事件,我认为必须以某种方式更新DOM?处理此问题的最佳方法是什么? 编辑:这是我的意思的示例: 同一级别的文件包含 文件“视图”包含 如果您尝试此操作,则将在您第一次按下Edit时看到该按钮变为View,但之后不再更改。为什么是这样? 问题答案: 像这样使用live: