如何调试Django ORM/SQL问题?(新迁移产生空值错误,现有数据库已损坏数据)
因此,更详细地说,我有一个带有如下字段的模型:如何调试Django ORM/SQL问题?(新迁移产生空值错误,现有数据库已损坏数据),django,postgresql,django-models,django-orm,django-migrations,Django,Postgresql,Django Models,Django Orm,Django Migrations,因此,更详细地说,我有一个带有如下字段的模型:permalink=models.IntegerField(默认值=0) 我实际上没有使用过这个字段,但现在我想使用它 然而,这张表上的所有车型,permalink现在在所有2000款车型上都是57295730 在尝试调试时,我尝试完全擦除数据库,运行migrate(~100次迁移)-但随后创建模型实例,我被告知permalink违反了NOTNULL约束,尽管我确实在传递一个值!我还得到了一个传递的值列表,但不确定如何知道哪个值/列与哪个字段相关 我
permalink=models.IntegerField(默认值=0)
我实际上没有使用过这个字段,但现在我想使用它
然而,这张表上的所有车型,permalink
现在在所有2000款车型上都是57295730
在尝试调试时,我尝试完全擦除数据库,运行migrate
(~100次迁移)-但随后创建模型实例,我被告知permalink违反了NOTNULL约束
,尽管我确实在传递一个值!我还得到了一个传递的值列表,但不确定如何知道哪个值/列与哪个字段相关
我甚至尝试过删除DB,删除迁移,运行一个新的makemigrations
——但仍然得到空冲突
更奇怪的是,自首次迁移以来,似乎从未接触过此字段
migrations$egrep permalink*
0001_initial.py:('permalink',models.IntegerField(默认值=0)),
迁移$
我正在运行(k)ubuntu14.04
、postgres9.3
、python3.4
、django1.9.4
虽然我很想知道如何解决这个问题,但我的问题是“我能做些什么来调试这种情况?”这不是我想要的答案,而是一个可行的答案:
git-bisect
(如果不能,请手动使用git-reset--hard-HEAD~1
查找问题!)
在我的情况下,我是骑在保存功能的模型在一个。。。愚蠢的方式
编辑:
更详细地说,我将permalink
设置为比当前最大值大1,但在之前的提交中,我删除了+1
但是,我没有很快注意到这个错误,因为它不会发生在数据库中的数据中
所以!这个错误实际上提供了相当多的信息——如果我更经常地运行我的测试(或使用CI),我会立即被告知错误,并且避免了我自己的头疼
因此,简而言之:*编写测试,运行它们-自动**也-无法编辑
permalink
的值,管理员说它已更改,但保持不变。所有其他数据看起来都正常,而且似乎编辑也正常。