2015-10-06 128 views
1

有人请解释为什么我得到一个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。我不明白这个问题来自我的代码。

+0

在创建表之后,您可能已向URLField添加了'null = True,blank = True'。在数据库shell中通过'python manage.py dbshel​​l'输入'ALTER TABLE stories_story ALTER COLUMN url DROP NOT NULL'命令,或者更好地使用[south](http://south.readthedocs.org/en/latest/tutorial/part1的.html)。 – ozgur

+0

我做到了!有没有修复? – elmo330

+0

什么是您的数据库服务器? MySQL,postgreSQL,sqlite? – ozgur

回答

0

首先,检查您是否使用迁移,检查应用程序中是否存在迁移目录,以及该目录中是否存在迁移(__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更改之后进行并应用迁移。

+0

我有__init__.py文件以外的其他迁移。在完成你推荐的最后一段后,我仍然遇到同样的错误。还有什么我可以做的? – elmo330

+0

你有多少次迁移?你可以向你的问题展示他们吗? – GwynBleidD

相关问题