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

时间:2014-01-13 05:50:26

标签: python django django-models

尝试 更新 现有的Django模型对象(使用save()方法)时, new < / strong>代替插入行。


例如:

>>> 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)

1 个答案:

答案 0 :(得分:3)

来自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几乎完美的自动生成!