NOT NULL约束失败:stories_story.url

时间:2015-10-06 21:22:59

标签: python django

有人可以解释为什么我得到NOT NULL约束失败:stories_story.url错误。

当我尝试“总结”时,我收到了错误消息。一个故事(localhost / story)

以下是一些文件。如果您需要更多,请告诉我。

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。我不明白我的代码中这个问题的来源。

1 个答案:

答案 0 :(得分: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

中进行更改后制作和应用迁移