Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试Django ORM/SQL问题?(新迁移产生空值错误,现有数据库已损坏数据)_Django_Postgresql_Django Models_Django Orm_Django Migrations - Fatal编程技术网

如何调试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)ubuntu
14.04
、postgres
9.3
、python
3.4
、django
1.9.4


虽然我很想知道如何解决这个问题,但我的问题是“我能做些什么来调试这种情况?”

这不是我想要的答案,而是一个可行的答案:

  • 进行自动化测试
  • 使用CI!首先要防止这个问题
  • 如果你没有做以上的事情。。。 使用
    git-bisect
    (如果不能,请手动使用
    git-reset--hard-HEAD~1
    查找问题!)

    在我的情况下,我是骑在保存功能的模型在一个。。。愚蠢的方式

    编辑: 更详细地说,我将
    permalink
    设置为比当前最大值大1,但在之前的提交中,我删除了+1

    但是,我没有很快注意到这个错误,因为它不会发生在数据库中的数据中

    所以!这个错误实际上提供了相当多的信息——如果我更经常地运行我的测试(或使用CI),我会立即被告知错误,并且避免了我自己的头疼


    因此,简而言之:*编写测试,运行它们-自动**

    也-无法编辑
    permalink
    的值,管理员说它已更改,但保持不变。所有其他数据看起来都正常,而且似乎编辑也正常。