我看到许多用户在使用以下形式的django错误时遇到的问题:
列X中的* null值处的IntegrityError违反了非空约束
通常这是因为他们仅在原始models.py
操作之后用null=True, blank=True
更新了syncdb
,他们需要手动更新有问题的SQL表,否则使用south进行迁移。但是,我确实遇到了这个问题,尽管完全删除了数据库模式并使用syncdb
使用models.py
中的正确选项重建了它。任何人都能解释一下吗?显然我可以只更新Postgre中的列以删除NOT NULL,但我担心这种情况会发生。
models.py
:
class TopTen(models.Model):
toptenuser = models.ForeignKey(TopTenUser)
date_in = models.DateTimeField()
date_out = models.DateTimeField(null=True, blank=True)
active = models.BooleanField()
syncdb
:
> (venv)richard@ubuntu:~/DjangoProjects/Heroku/mytopten$ heroku run python manage.py syncdb
> Running `python manage.py syncdb` attached to terminal... up, run.5406
> Creating tables ...
> Creating table auth_permission
> Creating table auth_group_permissions
> Creating table auth_group
> Creating table auth_user_groups
> Creating table auth_user_user_permissions
> Creating table auth_user
> Creating table django_content_type
> Creating table django_session
> Creating table django_site
> Creating table django_admin_log
> Creating table mytopten_toptenuser
> Creating table mytopten_topten
> Creating table mytopten_song_toptens
> Creating table mytopten_song
然而,我第一次runserver
并尝试输入TopTen实例:
IntegrityError:“date_out”列中的空值违反了非空约束
我在这里做错了吗?感谢。