【问题标题】:Django inserts new object after save() method instead of updateDjango 在 save() 方法之后插入新对象而不是更新
【发布时间】:2014-01-31 19:26:03
【问题描述】:

当尝试更新现有的 Django 模型对象(使用 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()

在第二次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)

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    来自 Django 文档(12):

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


    问题出在模型对象的类定义中。

    一旦我将 primary_key 字段设置为 AutoField,问题就消失了。

    我的新模型定义如下:


    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)
    

    Django 几乎完美的自动生成!

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多