NOT NULL约束失败:stories_story.url
有人请解释为什么我得到一个NOT NULL约束失败:stories_story.url错误。NOT NULL约束失败:stories_story.url
我得到的错误,当我尝试“透过”故事(本地主机/报道)
这里有一些文件。如果你需要更多,请让我知道。
models.py
class Story(models.Model):
title = models.TextField(max_length=350)
url = models.URLField(null=True, blank=True)
points = models.IntegerField(default = 1)
moderator = models.ForeignKey(User, related_name = 'moderated_stories')
category = models.ForeignKey(Category)
voters = models.ManyToManyField(User, related_name = 'liked_stories')
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
@property
def domain(self):
return urlparse(self.url).netloc
def __unicode__(self):
return self.title
class Meta:
verbose_name_plural = "stories"
views.py
@login_required(login_url = "/login/")
def story(request):
if request.method == 'POST':
form = StoryForm(request.POST)
if form.is_valid():
story = form.save(commit = False)
story.moderator = request.user
story.save()
return HttpResponseRedirect('/')
else:
form = StoryForm()
return render(request, 'stories/story.html', {'form': form})
编辑:
我完全清除URLField因为我再也不需要它。我跑了迁移,一切正常。除了我仍然得到相同的错误:NOT NULL约束失败:stories_story.url。我不明白这个问题来自我的代码。
首先,检查您是否使用迁移,检查应用程序中是否存在迁移目录,以及该目录中是否存在迁移(__init__.py
以外的文件)。
如果不是,那么您还没有为该应用程序使用迁移,因此为了使其正常工作,必须将models.py
回滚到与您的数据库状态相对应的状态。完成之后,运行python manage.py makemigrations your_app_name
并恢复您当前的models.py状态。
这样做后,运行python manage.py migrate your_app_name --fake-initial
,它会将您的初始迁移存储在您的迁移历史记录中。
如果至少有一个迁移已读取,或者如果完成了所有“如果不是”部分,请运行python ./manage.py makemigrations your_app_name
以创建新的迁移,并使用python ./manage.py migrate
来应用它们。您应在models.py
更改之后进行并应用迁移。
我有__init__.py文件以外的其他迁移。在完成你推荐的最后一段后,我仍然遇到同样的错误。还有什么我可以做的? – elmo330
你有多少次迁移?你可以向你的问题展示他们吗? – GwynBleidD
在创建表之后,您可能已向URLField添加了'null = True,blank = True'。在数据库shell中通过'python manage.py dbshell'输入'ALTER TABLE stories_story ALTER COLUMN url DROP NOT NULL'命令,或者更好地使用[south](http://south.readthedocs.org/en/latest/tutorial/part1的.html)。 – ozgur
我做到了!有没有修复? – elmo330
什么是您的数据库服务器? MySQL,postgreSQL,sqlite? – ozgur