有人可以解释为什么我得到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。我不明白我的代码中这个问题的来源。
答案 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
。