我有以下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
关于可能发生的事情的任何指示?
提前致谢!
答案 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自动添加,因此无需重新声明该字段。