2015-10-06 122 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

相關問題