Django / postgresql:DETAIL:失败的行包含(43,,1,2016-01-02,31,null,null)

时间:2016-01-02 22:31:49

标签: django postgresql

我正试图像这样提交评论......

Comment.objects.create(content = comment, post = post, user = request.user)

当我这样做时,我收到以下错误...

IntegrityError at /addcomment/1
null value in column "commentnumber" violates not-null constraint
DETAIL:  Failing row contains (43, , 1, 2016-01-02, 31, null, null).

失败的非空约束的两个“空值”是commentnumber模型中名为commentcountComment的前一个字段,我后来通过删除迁移文件然后使用{删除了该字段{1}}和makemigrations保存更改。

为什么我仍然需要在明确删除信息时将信息输入migratecommentnumber

如果需要更多信息,请在评论中提问。我很乐意帮忙。

1 个答案:

答案 0 :(得分:2)

  

失败的非空约束的两个“空值”是先前的   我在注释模型中的字段namedcommentnumber和commentcount   之后通过删除迁移文件然后使用来删除   makemigrations和migrate以保存更改。

删除迁移文件从数据库表中删除字段。您必须向后运行迁移才能执行此操作。 在这种情况下,向前运行迁移会添加字段,然后将其删除。

例如,如果您在迁移中添加字段comments.comment_number,请先运行./manage.py migrate your_app 37。这将从表中删除列comment_number。换句话说,您的数据库现在处于“状态”37.您现在可以删除迁移文件38。

由于您已经删除了迁移文件并且知道应删除哪些列,因此最好手动(通过Postgres),但请记住以下“技术”:)

如果您想了解更多信息,请查看源代码,打开迁移,您可以看到它扩展migrations.Migration。看看那个课程,你要找的方法是:unapply