Django(1.6.3)Model.save()方法不起作用

时间:2015-07-01 12:03:51

标签: django python-2.7 django-models

我有以下django模型(使用managed = False)。

class MyModel(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=250)
    description = models.TextField()
    client = models.ForeignKey(Client)
    created_on = models.DateTimeField(null=True, blank=True)
    user = models.ForeignKey(User, related_name='user')
    last_modified_by = models.ForeignKey(User, related_name='last_modified_by', null=True)
    last_modified_on = models.DateTimeField(null=True, blank=True)

    class Meta:
        managed = False

当我执行' python manage.py shell'并输入以下两个语句,我可以看到在mysql db中添加的行。

>>> dm = MyModel(name='name1', description='test1', client_id=6,user_id=9,last_modified_by_id=9)
>>> dm.save()

但是当我运行服务器' python manage.py runserver'并且在类方法中执行相同的语句,save()会通过,但DB中没有添加新行。

    def funcname(self, request):
        print("Creating new row...")
        self.var = MyModel(name='testName',description='testDescription',client_id=6, user=9, last_modified_by=9)
        self.var.save()
        print("Created new row')

观察:

  • 两个打印语句确实打印在控制台上。但是db中没有条目。

  • funcname()中没有错误/异常。

  • 尝试为diff列提供唯一条目。相同的结果

  • 当在函数开头使用pdb.set_trace()运行服务器时,发现MyModel.objects.filter()给出了正确的行数。但是在数据库中查看时,此数字不匹配。

    (Pdb)MyModel.objects.filter()

    显示2个MyModel对象的列表。

但是当通过登录DB进行检查时,相应的表只有一行。

使用Python 2.7

关于可能发生的事情的任何指示?

提前致谢!

3 个答案:

答案 0 :(得分:1)

你的主键是一个IntegerField,这意味着Django不知道它应该自动增量。因此,它不会自动设置值。

将定义更改为使用AutoField。

答案 1 :(得分:1)

在挖掘了一点之后,我发现在调用者的某处,使用了transaction.atomic装饰器。这导致写入db表失败。我在这里更新这个,希望这将有助于将来。

感谢所有回复的人。

干杯!

答案 2 :(得分:0)

您可以执行以下操作

    def funcname(self, request):
        self.var = MyModel.objects.create(name='testName',description='testDescription',client_id=6, user=9, last_modified_by=9)

Daniel评论了id / pk字段Django自动添加,因此无需重新声明该字段。